大于或等于运算符的MySQL忽略了它或等于义务

时间:2010-09-08 11:21:51

标签: mysql operators

如果连续的价格是38.03,那么以下搜索限制都应该返回包含结果的行。

WHERE price >= '38.02' AND price <= '38.03'(这有效)

WHERE price >= '20' AND price <= '100'(这有效)

WHERE price >= '38.03' AND price <= '38.03'(这不起作用)

WHERE price >= '38.03' AND price <= '100'(这不起作用)

WHERE price >= '38.03'(这不起作用)

WHERE price <= '38.03'(这有效)

价格在DB中存储为浮动。

基本上,<=正在运作,而>=则不然。这有什么原因可以吗?

2 个答案:

答案 0 :(得分:24)

请记住,float在精确度方面是一种有缺陷的数据类型。如果您将12表示为浮点数,则会获得11.99999999999998或其他内容。

'38.03'可以转换为十进制或其他更精确的数据类型(取决于RDBMS,我在这里是一般的),它将与浮点值不同。

float是32位,精度低。 Double工作得更好,是64位数据类型。某些系统中的十进制数据类型是128位数字数据类型,用于存储非常精确的数值,通常用于计价货币。

并且,跳过使用=运算符比较float值的习惯。浮点数用于近似和快速计算,只有与范围进行比较才能检查float的值。这基本上对每个系统都有效。

答案 1 :(得分:0)

当您使用引号(')时,您的变量将被视为字符串。我认为这就是你的问题。

尝试:WHERE价格&gt; = 38.03 AND价格&lt; = 38.03