2008-10-27 75 views
50

爲什麼Oracle的to_char()函數添加空格?爲什麼Oracle的to_char()函數添加空格?

select length('012'), 
     length(to_char('012')), 
     length(to_char('12', '000')) 
    from dual; 

3, 3, 4

+0

類似問題http://stackoverflow.com/questions/156329/unwanted-leading-blank-space-on-oracle-number-format有更詳細的解答。 – Vadzim 2015-01-14 13:15:37

+0

Oracle的設計決策永不止步... – MarioDS 2017-11-06 10:13:14

回答

22

您正在使用的格式罩固定寬度,並允許減號

106

額外的前導空格是潛在的減號。要刪除的空間,你可以在格式中使用FM:

SQL> select to_char(12,'FM000') from dual; 

TO_C 
---- 
012 

順便說一句,請注意,TO_CHAR接受一個數字參數; TO_CHAR( '012')被隱式轉換爲TO_CHAR(TO_NUMBER( '012'))= TO_CHAR(12)

27

要給出更清晰的答案:使用「FM時

select '['||to_char(12, '000')||']', 
     '['||to_char(-12, '000')||']', 
     '['||to_char(12,'FM000')||']' 
from dual 


[ 012]      [-012]      [012] 
1

注意'語法,它將不包括小數點後面的任何值,除非使用零指定。例如:

SELECT TO_CHAR(12345, 'fm99,999.00') FROM dual        

回報:'12,345.00' :'12,345

SELECT TO_CHAR(12345, 'fm99,999.99') FROM dual        

返回「。

正如你可以看到這將是一個問題,如果你期望在小數點後兩個零(也許在費用報告例如)。

相關問題