【发布时间】:2020-08-22 18:05:30
【问题描述】:
我正在尝试查找数量小于 1 的表中的所有记录。 为此,我使用了一个简单的查询:
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。我正在尝试找到一种体面的方法来获取此列所包含的实际值。
【问题讨论】:
-
了解
floats——然后不要使用它们。请改用numeric/decimal。该值不是“1”。类似于0.99999999999999997。 -
我知道值不是 1,但我想知道确切的值是多少。就像我说的,我没有创建表,我当然可以更改它,但这不是重点。
-
可以将“精确值”作为该值所包含的位 (
CONVERT(BINARY(8), quantity)) 或通过FORMAT(FORMAT(quantity, 'G17')) 以过高的精度进行检查,但请注意后者使用 .NET 格式化例程,并且在解析为 T-SQL 文字时不一定往返。 -
精确值为0x3FF0000000000000。
-
关闭@jarlh 它是:0x3FEFFFFFFFFFFFFF
标签: sql ssms sql-server-2016