2008-10-27 15 views
50

Dlaczego funkcja Oracle to_char() dodaje spacje?Dlaczego funkcja Oracle to_char() dodaje spacje?

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

3, 3, 4

+0

Podobne pytanie http://stackoverflow.com/questions/156329/unwanted-leading-blank-space-on-oracle-number-format zawiera bardziej szczegółowe odpowiedzi. – Vadzim

+0

Decyzje projektowe Oracle nigdy nie przestają mnie kłaść ... – MarioDS

Odpowiedz

22

Maska format, który używasz jest stałą szerokość i pozwala na znak minus

106

Dodatkowa przestrzeń jest wiodącym dla potencjalnego znakiem minus. Aby usunąć przestrzeń można wykorzystać FM w formacie:

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

TO_C 
---- 
012 

Nawiasem mówiąc, należy pamiętać, że to_char przyjmuje argumentu numer; to_char ('012') jest niejawnie konwertowane na to_char (TO_NUMBER ('012')) = to_char (12)

+2

Doskonale, dziękuję! –

+3

tylko dla wyjaśnienia: 'to_char (-12, 'FM00')' powodowałoby '-12', a nie (jak można się obawiać)' 12' lub '##' –

27

Aby odpowiedzi udzielone bardziej jasne:

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


[ 012]      [-012]      [012] 
1

być świadomy podczas korzystania z „fm "składnia nie będzie zawierała żadnych wartości po przecinku, chyba że podano za pomocą zer. Na przykład:

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

Powroty: '12, 345.00'

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

Powroty:. '12, 345”

Jak widać, byłby to problem, jeśli spodziewasz się dwóch zer po miejscu dziesiętnym (np. W raportach opłat).

Powiązane problemy