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

Come formattare un numero come valuta in Oracle

Oracle Database fornisce il TO_CHAR(number) funzione che consente di formattare i numeri in base a un determinato modello di formato. Ci sono tre elementi di formato che puoi usare con TO_CHAR() funzione per restituire un valore come valuta.

Elementi del formato valuta

Gli elementi del formato valuta sono L , C e U .

C Restituisce il simbolo della valuta ISO (il valore corrente di NLS_ISO_CURRENCY parametro).
L Restituisce il simbolo della valuta locale (il valore corrente di NLS_CURRENCY parametro).
U Restituisce il simbolo della doppia valuta Euro (o altro), determinato dal valore corrente del NLS_DUAL_CURRENCY parametro.

Questi modelli di formato ti consentono di emettere il simbolo di valuta in base alle impostazioni della tua valuta/regione, invece di dover fornire un simbolo di valuta fisso.

Anche se è vero che puoi fornire una stringa letterale per la valuta (ad esempio, un simbolo del dollaro ($ ) per dollari), questo presuppone che la valuta sia denominata in quel valore hardcoded. Esistono molte altre valute possibili in tutto il mondo e gli elementi del formato sono in grado di restituire dinamicamente il simbolo della valuta locale per la sessione dell'utente.

Esempio

Ecco un esempio da dimostrare:

ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT 
    TO_CHAR(12345, 'fmL99G999D00') AS "r1",
    TO_CHAR(12345, 'fmC99G999D00') AS "r3",
    TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;

Risultato:

           r1              r3            r3 
_____________ _______________ _____________ 
$12,345.00    AUD12,345.00    $12,345.00   

L'unica differenza tra queste tre colonne è l'elemento del formato valuta. Il primo usa L , il secondo usa C e il terzo usa U .

Tutti usano il fm modificatore di formato per eliminare qualsiasi riempimento. Usano anche il 9 e 0 formattare gli elementi per produrre i numeri (il 0 l'elemento include zeri iniziali/finali). Includono anche un separatore di gruppo (rappresentato da G ), un carattere decimale (rappresentato da D ).

Doppia valuta

Nell'esempio sopra, ho impostato il NLS_TERRITORY in Australia . Ciò ha comportato la restituzione dello stesso simbolo di valuta in due delle tre colonne (ovvero il r1 e r3 colonne).

Nell'esempio seguente, utilizzo un territorio diverso:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';
SELECT 
    TO_CHAR(12345, 'fmL99G999D00') AS "r1",
    TO_CHAR(12345, 'fmC99G999D00') AS "r3",
    TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;

Risultato:

            r1              r3            r3 
______________ _______________ _____________ 
kr12.345,00    DKK12.345,00    €12.345,00   

Questa volta otteniamo un simbolo di valuta diverso per ciascuno dei r1 e r3 colonne.

Vedere Come controllare i valori dei parametri NLS se è necessario verificarli.

Il 'nlsparam' Argomento

Quando si utilizza TO_CHAR() funzione, il 'nlsparam' 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, 
        'fmL99G999D99',
        '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, 
        'fmC99G999D99',
        '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 .

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 TO_CHAR() funzione.