【Oracle】Oracle SQL查询数字是否为小数点后两位

【Oracle】Oracle SQL查询数字是否为小数点后两位

因为业务要求,需要对系统中的属性值进行更新,如果数据为小数点后三位及以上,则需要将对应的单位进行变更,并将数据同步翻倍

例如 0.001KG,要换成 1G

我们知道instr可以找某个字符的位置,同样的,我们可以通过instr查找小数点的位置

image

同时,可以使用length来确定这个数值的位数

image

那么就可以发现,通过相减,就可以得到小数点后的位数了

select LENGTH(12.1235) - instr(12.1235 , '.') from dual

image

那么要找到小数点后三位及以上,就可以用减去的结果大于2来判断

select count(1) from dual where (length(12.1235) - instr(12.1235 , '.')) > 2

有返回行就说明是符合的,没有返回就说明是不符合的

image

但是这种会有个问题,我们知道instr在没查到的时候会返回0,那么如果不存在小数点的大于两位数的话,同样会符合

因此要再加一个条件instr(12.1235,'.') > 0来确保这个是存在小数点的

最后即

select count(1) from dual where (length(12.1235) - instr(12.1235 , '.')) > 2 and instr(12.1235,'.') > 0

以上

posted @ 2024-05-16 14:24  DbWong_0918  阅读(200)  评论(0编辑  收藏  举报