昨天碰到一个问题,需要用SQL查询C表中M字段有效小数位数大于两位的值,这个问题一看挺简单的,静下心来想想,其实没有头绪,自己对SQL函数这一块掌握的还是比较少的。
在网上搜索过程中,找到几个相关的SQL,但是要不不管用,要不就报错,好在了解了相关的解决思路和几个方法,自己写出来了。

1.扩大倍数法

SQL: 
select * from C 
where 
M*100 - floor(cast(M*100 as char)) > 0;

floor:取出整数部分,该函数使用时注意原字段精度问题,有时取出的整数因为精度问题而变小,这里将floor函数内的值转化为字符串类型,然后再取整;
cast(字段名 as 转换的类型 ):防止精度问题,将字段转化为字符串类型;

把字段值扩大100倍,floor函数取出其整数,若该字段小数位数大于2两位,相减的结果大于0,表示该字段小数位数大于2。

2.截取长度计算法

SQL:
select * from C
where
length(substr( 0 + CAST((M) AS CHAR),instr(M,'.')+1 ) ) > 2;

substr(str,pos): str,要截取的字符串;pos,从第几个字符开始截取,包含该字符;
cast(字段名 as 转换的类型 )://;
0 + CAST((i.discountAmout) AS CHAR):去掉某字段后面无效的0,0 + char 可以去掉无效0;
INSTR(STR,SUBSTR):在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX),INDEX是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况;

先去掉该字段无效的0,然后截取小数点后的部分,取其长度比较是否大于2

金无足赤,人无完人,若有文章什么问题欢迎各位批评指正,共同交流,共同进步。