SQL如何筛选数值字段第三位小数大于5的记录行
筛选第三位小数大于5的SQL实现方案
现有product表结构及测试数据如下:
| product | value |
|---|---|
| prodA | 1.3599 |
| prodB | 1.6222 |
| prodC | 1.2566 |
| prodD | 1.1000 |
需求为提取第三位小数数值大于5的行(对应示例中的prodA、prodC),可通过以下两种方案实现:
- 方案1:数值计算法(兼容性最高)
通过数学运算直接提取第三位小数判断,无需适配不同数据库的通配符规则:
SELECT * FROM product WHERE FLOOR(CAST(value AS DECIMAL(10,4)) * 1000) % 10 > 5;
逻辑说明:先将value转成定点数避免浮点精度误差,乘以1000后原本的第三位小数会移动到个位位置,向下取整后对10取模即可得到第三位小数的具体数值,直接判断是否大于5即可,同时会自动过滤小数位数不足3位的记录。
- 方案2:字符串匹配法
如果更习惯用通配符/正则匹配,可根据所用数据库选择对应写法:- MySQL/SQL Server(支持通配符范围匹配):
SELECT * FROM product WHERE value LIKE '%.__[6-9]%';- PostgreSQL(正则匹配):
SELECT * FROM product WHERE value::text ~ '\.\d{2}[6-9]';
两种方案测试后均可正确返回符合要求的记录。
内容的提问来源于stack exchange,提问作者Suporte 03 Ticbox
相关产品推荐
相关产品推荐

