You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效筛选数据库中Payment列小数点后超2位的money类型数据?

筛选money类型列中小数点后超过两位的数据

问题场景

现有一张数据表,其中Payment列的数据类型为money,数据如下:

IDPayment
141.20
242.30
343.4032
444.50
545.6082
646.70411

需要筛选出Payment列中小数点后位数超过2位的记录,避免使用游标或字符串转换这类低效率的方法(表中存在数千条数据),期望得到的结果如下:

IDPayment
343.4032
545.6082
646.70411

高效解决方案

可以通过纯数值运算实现筛选,无需字符串转换或游标,性能更优,适合大数据量表:

方法一:利用ROUND函数

SELECT ID, Payment
FROM YourTableName
WHERE Payment <> ROUND(Payment, 2)

原理:如果Payment小数点后不超过两位,ROUND到两位小数后与原数相等;若超过两位,则结果不等。

方法二:利用数值取余判断

SELECT ID, Payment
FROM YourTableName
WHERE (Payment * 100) % 1 <> 0

原理:将数值乘以100后,若小数点后超过两位,结果会带有小数部分,对1取余结果大于0;若仅两位或更少小数,结果为整数,取余等于0。

方法三:利用FLOOR函数

SELECT ID, Payment
FROM YourTableName
WHERE Payment > FLOOR(Payment * 100) / 100

原理:将数值乘以100后取整再除以100,得到仅保留两位小数的数值,若原数大于该值,说明小数点后存在更多位数。

说明

以上方法均基于money类型的精确数值特性,不会出现精度丢失问题,且能利用Payment列的索引(如果已创建)进一步提升查询效率,远优于字符串转换或游标方案。

内容的提问来源于stack exchange,提问作者Yevhen Vasylynchuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:35:23