关于 SQL查询时,使用to_char函数将数字转为指定有效位数小数时 这件小事儿

前言

今天遇到一个bug,是使用to_char函数将数字转为两位有效小数的字符串,sql语句的大意是

select to_char(20,'0.00')  || '%' from dual;

我想要的结果是20.00%,结果输出为 #####%,想破脑阔也没想明白什么情况,查了一下资料,当做笔记记录一下

to_char(param1,param2) 匹配的时候,param1的整数位数要小于等于param2的整数位数,所以这种情况要写成

方法一

select to_char(20,'000.00')  || '%'  from dual;

这样的输出结果就是20.00%。

但是这种写法会有一个问题,param1的位数是可变的,如果param1的值是一位数,比如2,这时输出结果就是002.00%,并且超过3位数还是输出######%,显然这个不是我们要的结果。

方法二

select to_char(20,'999.00')  || '%'  from dual;

这种方式会输出 (空格)20.00%,他会将前面的0换成空格,有这种需求的伙伴可以用这种方式,但是param1的整数位数要大于param2的整数位数还是会输出 #####%。

方法三

select to_char(20,'FM999.00')  || '%'  from dual;

这样就可以去除空格,输出20.00%,但是param1的整数位数要大于param2的整数位数还是会输出 #####%。

 

因为我这算法不会有太大的位数,所以格式为‘FM999.00’就够用的,大家如果使用的话可以根据自己的需求适度增加9的个数。

posted @ 2021-09-24 10:51  远山伴痴人  阅读(716)  评论(0编辑  收藏  举报