gpt4 book ai didi

WHERE 子句中的 SQL Server 浮点

转载 作者:行者123 更新时间:2023-12-02 17:17:16 30 4
gpt4 key购买 nike

我正在尝试查询数据库,我需要获取权重等于 60.5 的客户列表。问题是 60.5 是一个实数,我以前从未在 where 子句中使用实数查询过数据库。

我已经尝试过这个:

SELECT Name FROM Customers WHERE Weight=60.5
SELECT Name FROM Customers WHERE Weight=cast(60.5 as real)
SELECT Name FROM Customers WHERE Weight=cast(60.5 as decimal)
SELECT Name FROM Customers WHERE Weight=convert(real,'60.5')
SELECT Name FROM Customers WHERE Weight=convert(decimal,'60.5')

这些查询返回 0 值,但在“客户”表中,它们有 10 行,权重=60.5

最佳答案

您的问题是 float 根据定义是不准确的。将看似 60.5 的值与实际的 60.5 进行比较可能并不像您所注意到的那样有效。

典型的解决方案是测量两个值之间的差异,如果它小于某个预定义的 epsilon,则认为它们相等:

SELECT Name FROM Customers WHERE ABS(Weight-60.5) < 0.001

为了获得更好的性能,您实际上应该使用:

SELECT Name FROM Customers WHERE Weight BETWEEN 64.999 AND 65.001

关于WHERE 子句中的 SQL Server 浮点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563996/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com