关于 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的个数。