MySQL查询小数部分大于0的数据问题求助
如何用SQL筛选小数部分大于0的数据?
嘿,你这种一个个枚举数值的操作确实太折腾了,完全没必要!其实我们可以直接通过计算来判断数值的小数部分是否大于0,给你几个通用且高效的方案:
方法一:用数值减去整数部分判断
直接用目标列的值减去它的整数部分,如果结果大于0,就说明存在非零的小数部分:
SELECT * FROM your_table WHERE column_name - FLOOR(column_name) > 0;
解释:FLOOR()函数会返回小于等于目标数值的最大整数,比如FLOOR(1.75)得到1,FLOOR(47.000)得到47。用原数值减去这个整数结果,剩下的就是小数部分,只要这个结果大于0就符合你的要求。
方法二:用取余运算判断
利用任何数值对1取余的结果就是它的小数部分这个特性,写法更简洁:
SELECT * FROM your_table WHERE MOD(column_name, 1) > 0;
解释:比如MOD(3.25, 1)返回0.25,MOD(2.0000, 1)返回0,通过判断这个余数是否大于0,就能快速筛选出符合条件的行。
注意事项:数据类型问题
如果你的列存储的是字符串类型(比如原本是文本格式的数值),需要先把它转换成数值类型再进行计算,比如用CAST()函数:
SELECT * FROM your_table WHERE CAST(column_name AS DECIMAL(10,4)) - FLOOR(CAST(column_name AS DECIMAL(10,4))) > 0;
如果列本身就是数值类型(比如DECIMAL、FLOAT),直接用上面的方法就可以啦。
内容的提问来源于stack exchange,提问作者Attila Naghi
相关产品推荐
相关产品推荐

