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

Sådan formateres et tal som valuta i Oracle

Oracle Database leverer TO_CHAR(number) funktion, der giver dig mulighed for at formatere tal baseret på en given formatmodel. Der er tre formatelementer, som du kan bruge med TO_CHAR() funktion for at returnere en værdi som en valuta.

Valutaformatelementer

Valutaformatelementerne er L , C og U .

C Returnerer ISO-valutasymbolet (den aktuelle værdi af NLS_ISO_CURRENCY parameter).
L Returnerer det lokale valutasymbol (den aktuelle værdi af NLS_CURRENCY parameter).
U Returnerer euro-symbolet (eller et andet) dobbeltvalutasymbol, bestemt af den aktuelle værdi af NLS_DUAL_CURRENCY parameter.

Disse formatmodeller giver dig mulighed for at udskrive valutategnet baseret på dine valuta-/regionsindstillinger i stedet for at skulle angive et fast valutasymbol.

Selvom det er rigtigt, at du kan angive en streng bogstavelig for valutaen (f.eks. et dollartegn ($ ) for dollars), forudsætter dette, at valutaen er denomineret i den hårdkodede værdi. Der er mange andre mulige valutaer rundt om i verden, og formatelementerne er i stand til dynamisk at returnere det lokale valutasymbol for brugerens session.

Eksempel

Her er et eksempel til demonstration:

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;

Resultat:

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

Den eneste forskel mellem disse tre kolonner er valutaformatelementet. Den første bruger L , den anden bruger C , og den tredje bruger U .

De bruger alle fm formatmodifikator for at undertrykke enhver polstring. De bruger også 9 og 0 formater elementer for at udskrive tallene (0 element inkluderer foran/efter nuller). De inkluderer også en gruppeseparator (repræsenteret ved G). ), et decimaltegn (repræsenteret ved D ).

Dobbelt valuta

I ovenstående eksempel indstillede jeg NLS_TERRITORY til Australia . Dette resulterede i, at det samme valutasymbol blev returneret i to af de tre kolonner (dvs. r1 og r3 kolonner).

I det følgende eksempel bruger jeg et andet område:

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;

Resultat:

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

Denne gang får vi et andet valutasymbol for hver af r1 og r3 kolonner.

Se, hvordan du kontrollerer værdierne af NLS-parametrene, hvis du har brug for at kontrollere dem.

'nlsparam' Argument

Når du bruger TO_CHAR() funktion, 'nlsparam' argument kan bruges til at angive decimaltegn og gruppeseparator, det lokale valutasymbol og det internationale valutasymbol.

Det har følgende form:

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Eksempel:

SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultat:

€1.234,56

Her er den igen, men denne gang erstatter jeg L med C i formatmodellen:

SELECT 
    TO_CHAR(
        1234.56, 
        'fmC99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultat:

EUR1.234,56

C returnerer ISO-valutasymbolet, som i dette tilfælde er EUR .

Se denne fulde liste over talformatelementer i Oracle for en liste over formatelementer, der kan bruges til at formatere tal med TO_CHAR() funktion.


  1. Søg på tværs af flere tabeller og vis også tabelnavn i resulterende rækker

  2. MySQL #1140 - Blanding af GROUP-kolonner

  3. FILE_ID() vs FILE_IDEX() i SQL Server:Hvad er forskellen?

  4. Dupliker rækker i en primær nøgletabel.