前言
今天遇到一個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的個數。
