我猜@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)
注意:casting withCAST("12.345" as DECIMAL(10,5))
需要事先了解可能出现的位数。如果您正在计算数据库中的值或使用 将它们从字符串中转换"12.345" + 0
,它会有些工作,但由于二进制浮点数的存储方式,您会得到类似:"12.345" + 0
→12.34500000000000064
这不是您可能想要的答案。然后,您可以尝试再次舍入以在某个位置后删除数字,依此类推...