在一台服务器上,我使用mysql版本5.0.45,当运行以下查询时,如果boolvalue ='True',则返回1,其他2.2,就像它应该的那样。
SELECT Q.value
FROM (
SELECT (CASE table.boolvalue='True' WHEN 1 THEN 1 ELSE 2.2 END) AS value FROM table
) Q;
在另一台服务器上(webhosting)我使用mysql版本5.0.22,当运行相同的查询时,它总是返回0.9999,为什么?!
但是使用这个查询它会返回结果:
SELECT (CASE table.boolvalue='True' WHEN 1 THEN 1 ELSE 2.2 END) AS value FROM table
我需要使用子查询,因为查询还会执行其他一些操作,只需将其分解以显示错误的位置。请有人向我解释一下吗?
答案 0 :(得分:1)
可能是floating point错误。尝试在您的号码前贴上ROUND()来解决问题
答案 1 :(得分:0)
这可能只是一个错误。毕竟5.0.22很老了。顺便说一下,您应该能够简化CASE
SELECT (CASE WHEN table.boolvalue='True' THEN 1 ELSE 2.2 END) AS value FROM table
甚至只是使用IF()
SELECT IF(table.boolvalue='True', 1, 2.2) AS value FROM table