Waarom voegt de functie to_char()
van Oracle spaties toe?
select length('012'),
length(to_char('012')),
length(to_char('12', '000'))
from dual;
3, 3, 4
Antwoord 1, autoriteit 100%
De extra voorloopruimte is voor het potentiële minteken. Om de spatie te verwijderen, kunt u FM gebruiken in het formaat:
SQL> select to_char(12,'FM000') from dual;
TO_C
----
012
Trouwens, merk op dat to_char een NUMBER-argument aanneemt; to_char(‘012’) wordt impliciet geconverteerd naar to_char(to_number(‘012’)) = to_char (12)
Antwoord 2, autoriteit 25%
Om de gegeven antwoorden duidelijker te maken:
select '['||to_char(12, '000')||']',
'['||to_char(-12, '000')||']',
'['||to_char(12,'FM000')||']'
from dual
[ 012] [-012] [012]
Antwoord 3, autoriteit 23%
Het formaatmasker dat u gebruikt heeft een vaste breedte en staat een minteken toe
Antwoord 4, autoriteit 2%
Houd er rekening mee dat wanneer u de ‘fm’-syntaxis gebruikt, deze geen waarden achter de komma zal bevatten, tenzij gespecificeerd met nullen. Bijvoorbeeld:
SELECT TO_CHAR(12345, 'fm99,999.00') FROM dual
retourneert: ‘12.345.00’
SELECT TO_CHAR(12345, 'fm99,999.99') FROM dual
retourneert: ‘12.345.’
Zoals u kunt zien, kan dit een probleem zijn als u twee nullen achter de komma verwacht (misschien in bijvoorbeeld vergoedingsrapporten).