1. 程式人生 > 其它 >關於 SQL查詢時,使用to_char函式將數字轉為指定有效位數小數時 這件小事兒

關於 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的個數。