In Oracle Database, il TO_CHAR(number)
la funzione converte un numero in un VARCHAR2
valore nel formato specificato dall'argomento format.
Sintassi
La sintassi è questa:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Dove:
n
può essere di tipoNUMBER
,BINARY_FLOAT
oBINARY_DOUBLE
.fmt
è un modello di formato opzionale che specifica come formattare il risultato. Vedi gli elementi di formato numerici validi che possono essere utilizzati per costruire il tuo modello di formato.'nlsparam'
è un argomento facoltativo che specifica come vengono restituiti i vari caratteri. È possibile utilizzarlo per specificare il carattere decimale e il separatore di gruppo, il simbolo della valuta locale e il simbolo della valuta internazionale. Se questo argomento viene omesso, vengono utilizzati i valori predefiniti per la sessione corrente.
Esempio
Ecco un esempio per dimostrare come funziona la funzione:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Risultato:
RESULT __________ 12,345
Il primo argomento è il numero effettivo che stiamo formattando e il secondo argomento è il modello di formato. Il modello di formato specifica come è formattato il numero.
In questo caso, il nostro modello di formato formatta il numero con un separatore di gruppo nella posizione appropriata. Ogni cifra numerica è rappresentata da 9
e il separatore di gruppo è rappresentato da G
.
Ecco cosa succede se cambiamo leggermente il modello di formato:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Risultato:
RESULT ___________ 012,345
In questo caso, abbiamo iniziato il modello di formato con un 0
carattere. Ciò restituisce uno zero iniziale ove applicabile. Il 9
il carattere non restituisce zeri iniziali.
In effetti, potremmo sostituire tutti i 9
s con 0
se vogliamo. Ecco un confronto che mostra come i risultati possono variare considerevolmente, a seconda dell'elemento di formato che utilizzi:
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Risultato:
000G000 999G999 ___________ ___________ 000,012 12
Simboli di valuta
Puoi usare la L
elemento di formato per restituire il simbolo della valuta locale.
Esempio:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Risultato:
RESULT _______________________ $12,345.00
Questo esempio utilizza un modello di formato che restituisce il risultato utilizzando il simbolo della valuta locale (rappresentato da L
), un separatore di gruppo (rappresentato da G
), un carattere decimale (rappresentato da D
) e, naturalmente, ogni cifra numerica (rappresentata da 9
).
Il simbolo della valuta locale è determinato dal valore corrente di NLS_CURRENCY
parametro. È vero che avremmo potuto usare il simbolo del dollaro ($
) per il simbolo della valuta, ma presuppone che la valuta sia denominata in dollari. Ci sono molte altre possibili valute in tutto il mondo e la L
format element è in grado di restituire dinamicamente il simbolo della valuta locale per la sessione dell'utente.
Vedere Come controllare i valori dei parametri NLS se è necessario verificarli.
Consulta questo elenco completo di elementi di formato numerico in Oracle per un elenco di elementi di formato che possono essere utilizzati per formattare i numeri con questa funzione.
Formato predefinito
Se ometti fmt
argomento, il numero viene convertito in un VARCHAR2
valore esattamente abbastanza a lungo da contenere le sue cifre significative.
Ecco un esempio di conversione di un numero senza specificare il formato:
SELECT TO_CHAR(525.45)
FROM DUAL;
Risultato:
525.45
Il 'nlsparam'
Argomento
Il 'nlsparam'
L'argomento può essere utilizzato per specificare il carattere decimale e il separatore di gruppo, il simbolo della valuta locale e il simbolo della valuta internazionale.
Ha la forma seguente:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
Esempio:
SELECT
TO_CHAR(
1234.56,
'L99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Risultato:
€1.234,56
Eccolo di nuovo, ma questa volta sostituisco L
con C
nel modello di formato:
SELECT
TO_CHAR(
1234.56,
'C99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Risultato:
EUR1.234,56
Il C
restituisce il simbolo della valuta ISO, che in questo caso è EUR
.
Come eliminare l'imbottitura
Potresti aver notato che alcuni degli esempi hanno il riempimento applicato a sinistra dei risultati. Tale riempimento può essere rimosso con il fm
modificatore di formato.
Esempio:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Risultato:
€1.234,56
Argomenti nulli
Passaggio null
risulta null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Risultato:
null
Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null
si verifica come risultato di un SQL SELECT
dichiarazione.
Tuttavia, puoi utilizzare SET NULL
per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null
deve essere restituito.
Argomento mancante
Chiamando la funzione senza passare alcun argomento, viene visualizzato un errore:
SELECT TO_CHAR()
FROM DUAL;
Risultato:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Il passaggio di troppi argomenti genera anche un errore:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
Risultato:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"