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.