我了解比较浮点数的许多问题,并在这种情况下对它们的使用感到遗憾-但我不是表格的作者,攀爬的障碍很小。
有人决定使用浮点数,因为您希望使用GUID。我需要检索具有特定浮点值的所有记录。
sp_help MyTable
-- Column_name Type Computed Length Prec
-- RandomGrouping float no 8 53
Run Code Online (Sandbox Code Playgroud)
这是我天真的尝试:
--yields no results
SELECT RandomGrouping
FROM MyTable
WHERE RandomGrouping = 0.867153569942739
Run Code Online (Sandbox Code Playgroud)
这是一个大概的工作尝试:
--yields 2 records
SELECT RandomGrouping
FROM MyTable
WHERE RandomGrouping BETWEEN 0.867153569942739 - 0.00000001
AND 0.867153569942739 + 0.00000001
-- 0.867153569942739
-- 0.867153569942739
Run Code Online (Sandbox Code Playgroud)
在我幼稚的尝试中,该文字是浮点文字吗?还是真的是十进制文字,以后会转换?
如果我的文字不是浮点文字,那么制作浮点文字的语法是什么?
编辑:我发生了另一种可能性...它可能是比显示的更精确的数字存储在此列中。创建表示该数字的文字可能是不可能的。我将接受证明确实如此的答案。
编辑:对DVK的回应。
TSQL是MSSQLServer的SQL方言。
该脚本有效,因此可以确定性地在float类型之间执行相等操作:
DECLARE @X float
SELECT top 1 @X = RandomGrouping
FROM MyTable
WHERE RandomGrouping BETWEEN 0.839110948199148 - 0.000000000001
AND 0.839110948199148 + 0.000000000001
--yields two records …Run Code Online (Sandbox Code Playgroud)