sql >> Databasteknik >  >> RDS >> Oracle

Hur man formaterar ett tal som valuta i Oracle

Oracle Database tillhandahåller TO_CHAR(number) funktion som gör att du kan formatera tal baserat på en given formatmodell. Det finns tre formatelement som du kan använda med TO_CHAR() funktion för att returnera ett värde som valuta.

Valutaformatelement

Valutaformatelementen är L , C och U .

C Returnerar ISO-valutasymbolen (det aktuella värdet för NLS_ISO_CURRENCY parameter).
L Returnerar den lokala valutasymbolen (det aktuella värdet för NLS_CURRENCY parameter).
U Returnerar symbolen för euro (eller annan) dubbelvaluta, bestäms av det aktuella värdet på NLS_DUAL_CURRENCY parameter.

Dessa formatmodeller låter dig mata ut valutatecknet baserat på dina valuta-/regioninställningar, istället för att behöva tillhandahålla en fast valutasymbol.

Även om det är sant att du kan ange en bokstavlig sträng för valutan (till exempel ett dollartecken ($ ) för dollar) förutsätter detta att valutan är denominerad i det hårdkodade värdet. Det finns många andra möjliga valutor runt om i världen, och formatelementen kan dynamiskt returnera den lokala valutasymbolen för användarens session.

Exempel

Här är ett exempel att visa:

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 enda skillnaden mellan dessa tre kolumner är valutaformatelementet. Den första använder L , den andra använder C , och den tredje använder U .

De använder alla fm formatmodifierare för att undertrycka eventuell utfyllnad. De använder också 9 och 0 formatera element för att mata ut siffrorna (0 element inkluderar inledande/efterföljande nollor). De inkluderar också en gruppseparator (representerad av G ), ett decimaltecken (representerat av D ).

Dubbla valutor

I exemplet ovan ställde jag in NLS_TERRITORY till Australia . Detta resulterade i att samma valutasymbol returnerades i två av de tre kolumnerna (d.v.s. r1 och r3 kolumner).

I följande exempel använder jag ett annat territorium:

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   

Den här gången får vi en annan valutasymbol för var och en av r1 och r3 kolumner.

Se Hur du kontrollerar värdena för NLS-parametrarna om du behöver kontrollera dem.

'nlsparam' Argument

När du använder TO_CHAR() funktionen, 'nlsparam' argument kan användas för att ange decimaltecknet och gruppavgränsaren, den lokala valutasymbolen och den internationella valutasymbolen.

Den har följande form:

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

Exempel:

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

Resultat:

€1.234,56

Här är den igen, men den här gången byter jag ut 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 returnerar ISO-valutasymbolen, som i det här fallet är EUR .

Se den här fullständiga listan över nummerformatelement i Oracle för en lista över formatelement som kan användas för att formatera tal med TO_CHAR() funktion.


  1. Typkonvertering. Vad gör jag med ett PostgreSQL OID-värde i libpq i C?

  2. Hur man automatiserar distributionen av PostgreSQL-databasen

  3. Kör flera frågor i ett enda Oracle-kommando i C#

  4. Priset för att inte rensa