Oracle
 sql >> Database >  >> RDS >> Oracle

TO_CHAR(numero) Funzione in Oracle

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 tipo NUMBER , BINARY_FLOAT o BINARY_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"