如何通过SQL语句查询筛选出小数位数超过2位的数值
小数位数超2位的数值筛选SQL方案
核心逻辑
只要小数位数超过2位,将数值乘以100后必然存在小数部分,只需要判断乘以100后的结果是否不等于其向下取整的结果即可筛选出目标数据。
不同数据库实现写法
MySQL
SELECT * FROM TableName WHERE 数值列 * 100 <> FLOOR(数值列 * 100); -- 兼容负数的写法 SELECT * FROM TableName WHERE ABS(数值列 * 100) <> FLOOR(ABS(数值列 * 100));
PostgreSQL
SELECT * FROM TableName WHERE (数值列 * 100) <> FLOOR(数值列 * 100); -- 模运算简化写法 SELECT * FROM TableName WHERE MOD(数值列::numeric * 100, 1) <> 0;
SQL Server
SELECT * FROM TableName WHERE 数值列 * 100 <> FLOOR(数值列 * 100);
Oracle
SELECT * FROM TableName WHERE MOD(数值列 * 100, 1) <> 0;
特殊场景:数值以字符串格式存储
如果字段为字符串类型存储的数值,可以直接通过字符串函数判断小数点后的长度:
SELECT * FROM TableName WHERE LENGTH(SUBSTR(数值列, INSTR(数值列, '.') + 1)) > 2;
示例参考

内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

