我猜@Rahul Tripathi的解决方案很可能是最好的。
但是我在不同的上下文中尝试了一些东西,并根据这个问题的答案找到了另一个可能的解决方案:Store only numbers after Comma mysql
由于MySQL如何处理和存储浮点值等等,这个解决方案在正确工作的情况下受到了相当大的限制。
假设summ
是一个数字(如果是字符串,则需要进行转换或者只需使用@Rahul Tripathi的解决方案)。而且summ
最好是一个十进制数,而不是浮点数,因为它具有更高的精度和存储原因。
SELECT *
FROM `table`
WHERE (LENGTH(TRIM(TRAILING "0" from MOD(`summ`, 1))) - 2) > 2;
测试一下:
set @fraction = 100.005;
set @modulo = mod(@fraction, 1);
set @modulo = trim(trailing "0" from @modulo);
set @decimals = length(@modulo) - 2;
select @fraction, @modulo, @decimals;
+
| @fraction | @modulo | @decimals |
+
| 100.005 | 0.005 | 3 |
+
1 row in set (0.00 sec)
注意:使用
CAST("12.345" as DECIMAL(10,5))
进行强制类型转换需要先了解数字的位数限制。如果您在数据库中计算值或从字符串中进行转换,例如
"12.345" + 0
,这种方法可能会有所作用,但由于二进制浮点数的存储方式,您将得到类似于
"12.345" + 0
→
12.34500000000000064
的结果,这可能不是您想要的答案。然后,您可以尝试再次四舍五入以删除某个位置后面的数字等等...