表列的值并不像它看起来那样。

问题描述 投票:0回答:2

我试图找到一个表中的所有记录,其中数量小于1.为此,我使用一个简单的查询,但是,我得到的结果,数量是实际的1.这列的类型是浮动的一些奇怪的原因(Dont问为什么,我没有创建)。

SELECT * FROM Table WHERE Quantity < 1

然而,我得到的结果是数量是实际的1.这列的类型是FLOAT,因为一些奇怪的原因(不要问为什么,我没有创建它)。

我怎么知道这一列的具体数值是多少。我试过了。

SELECT 
  CEILING(quantity) as [Ceiling quantity], 
  FLOOR(quantity) as [Floor quantity], 
  CAST(ROUND(Quantity, 2) AS INT) as [Rounded quantity], 
  Quantity AS [Actual quantity] 
FROM Table

但结果是:

Ceiling quantity       Floor quantity         Rounded quantity Actual quantity
---------------------- ---------------------- ---------------- ----------------------
1                      0                      1                1

我知道技术上的数量 小于一。我试图找到一个像样的方法来获取这一列的实际值,我试图找到表中所有数量小于1的记录。

sql ssms sql-server-2016
2个回答
0
投票

感谢 @JeroenMostert 提供的正确答案。

SELECT 
  FORMAT(quantity, 'G17') as [Format quantity]
FROM Table

结果是:

Format quantity
-------------------
0.99999999999999989

0
投票

CONVERT方法有一种风格,每一个不同的浮点值都保证转换为一个不同的字符串。这是第3种样式,在SQL Server 2016及以后的版本中可用。你可以在这里阅读更多关于convert方法和不同风格的信息。

https:/docs.microsoft.comen-ussqlt-sqlfunctionscast-and-convert-transact-sql。

你可以这样试一试。

SELECT Convert (VARCHAR(99), Quantity, 3) FROM Table
© www.soinside.com 2019 - 2024. All rights reserved.