sql >> Database >  >> RDS >> Oracle

Een getal opmaken als valuta in Oracle

Oracle Database levert de TO_CHAR(number) functie waarmee u getallen kunt opmaken op basis van een bepaald formaatmodel. Er zijn drie formaatelementen die u kunt gebruiken met de TO_CHAR() functie om een ​​waarde als valuta terug te geven.

Valuta-indelingselementen

De valuta-indelingselementen zijn L , C , en U .

C Retourneert het ISO-valutasymbool (de huidige waarde van de NLS_ISO_CURRENCY parameter).
L Retourneert het lokale valutasymbool (de huidige waarde van de NLS_CURRENCY parameter).
U Retourneert het Euro (of andere) dubbele valutasymbool, bepaald door de huidige waarde van de NLS_DUAL_CURRENCY parameter.

Met deze formaatmodellen kunt u het valutateken uitvoeren op basis van uw valuta-/regio-instellingen, in plaats van een vast valutasymbool op te geven.

Hoewel het waar is dat u een letterlijke tekenreeks voor de valuta kunt opgeven (bijvoorbeeld een dollarteken ($ ) voor dollars), wordt aangenomen dat de valuta is uitgedrukt in die hardcoded waarde. Er zijn veel andere mogelijke valuta's over de hele wereld en de formaatelementen kunnen het lokale valutasymbool dynamisch retourneren voor de sessie van de gebruiker.

Voorbeeld

Hier is een voorbeeld om te demonstreren:

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;

Resultaat:

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

Het enige verschil tussen deze drie kolommen is het valuta-indelingselement. De eerste gebruikt L , de tweede gebruikt C , en de derde gebruikt U .

Ze gebruiken allemaal de fm format modifier om opvulling te onderdrukken. Ze gebruiken ook de 9 en 0 formaatelementen om de getallen uit te voeren (de 0 element bevat voorloop-/achterloopnullen). Ze bevatten ook een groepsscheidingsteken (weergegeven door G ), een decimaal teken (weergegeven door D ).

Dubbele valuta's

In het bovenstaande voorbeeld stel ik de NLS_TERRITORY . in naar Australia . Dit resulteerde in het retourneren van hetzelfde valutasymbool in twee van de drie kolommen (d.w.z. de r1 en r3 kolommen).

In het volgende voorbeeld gebruik ik een ander gebied:

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;

Resultaat:

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

Deze keer krijgen we een ander valutasymbool voor elk van de r1 en r3 kolommen.

Zie Hoe u de waarden van de NLS-parameters kunt controleren als u ze moet controleren.

De 'nlsparam' Argument

Bij gebruik van de TO_CHAR() functie, de 'nlsparam' argument kan worden gebruikt om het decimale teken en het groepsscheidingsteken, het lokale valutasymbool en het internationale valutasymbool op te geven.

Het heeft de volgende vorm:

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

Voorbeeld:

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

Resultaat:

€1.234,56

Hier is het weer, maar deze keer vervang ik L met C in het formaatmodel:

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

Resultaat:

EUR1.234,56

De C geeft het ISO-valutasymbool terug, in dit geval EUR .

Zie deze volledige lijst met elementen van getalnotatie in Oracle voor een lijst van formaatelementen die kunnen worden gebruikt om getallen op te maken met de TO_CHAR() functie.


  1. Kan een refererende sleutel verwijzen naar een niet-unieke index?

  2. SSL voor PostgreSQL-verbindingsknooppunten

  3. Waarom zegt Postgres dat column niet bestaat?

  4. Hoe te ontsnappen aan een string terwijl het patroon overeenkomt in PostgreSQL