Waarom voegt de functie to_char() van Oracle spaties toe?

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).

Other episodes