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
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
Maska format, który używasz jest stałą szerokość i pozwala na znak minus
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)
Doskonale, dziękuję! –
tylko dla wyjaśnienia: 'to_char (-12, 'FM00')' powodowałoby '-12', a nie (jak można się obawiać)' 12' lub '##' –
Aby odpowiedzi udzielone bardziej jasne:
select '['||to_char(12, '000')||']',
'['||to_char(-12, '000')||']',
'['||to_char(12,'FM000')||']'
from dual
[ 012] [-012] [012]
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).
Podobne pytanie http://stackoverflow.com/questions/156329/unwanted-leading-blank-space-on-oracle-number-format zawiera bardziej szczegółowe odpowiedzi. – Vadzim
Decyzje projektowe Oracle nigdy nie przestają mnie kłaść ... – MarioDS