I Oracle Database, TO_CHAR(number)
funktion konverterar ett tal till en VARCHAR2
värde i formatet som anges av formatargumentet.
Syntax
Syntaxen ser ut så här:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Var:
n
kan vara av typenNUMBER
,BINARY_FLOAT
, ellerBINARY_DOUBLE
.fmt
är en valfri formatmodell som anger hur resultatet ska formateras. Se de giltiga talformatelementen som kan användas för att konstruera din formatmodell.'nlsparam'
är ett valfritt argument som anger hur olika tecken returneras. Du kan använda den för att ange decimaltecknet och gruppavgränsaren, den lokala valutasymbolen och den internationella valutasymbolen. Om detta argument utelämnas används standardvärdena för den aktuella sessionen.
Exempel
Här är ett exempel för att visa hur funktionen fungerar:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Resultat:
RESULT __________ 12,345
Det första argumentet är det faktiska numret som vi formaterar, och det andra argumentet är formatmodellen. Formatmodellen anger hur numret formateras.
I det här fallet formaterar vår formatmodell numret med en gruppavgränsare i lämplig position. Varje siffra representeras av 9
, och gruppseparatorn representeras av G
.
Så här händer om vi ändrar formatmodellen något:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Resultat:
RESULT ___________ 012,345
I det här fallet startade vi formatmodellen med en 0
karaktär. Detta returnerar en inledande nolla där det är tillämpligt. 9
tecken returnerar inte inledande nollor.
Faktum är att vi skulle kunna ersätta alla 9
s med 0
s om vi vill. Här är en jämförelse som visar hur resultaten kan skilja sig ganska mycket, beroende på vilket formatelement du använder:
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Resultat:
000G000 999G999 ___________ ___________ 000,012 12
Valutasymboler
Du kan använda L
formatelement för att returnera den lokala valutasymbolen.
Exempel:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Resultat:
RESULT _______________________ $12,345.00
Det här exemplet använder en formatmodell som matar ut resultatet med hjälp av symbolen för lokal valuta (representerad av L
), en gruppseparator (representerad av G
), ett decimaltecken (representerat av D
), och naturligtvis varje numerisk siffra (representerad av 9
).
Den lokala valutasymbolen bestäms av det aktuella värdet på NLS_CURRENCY
parameter. Det är sant att vi kunde ha använt ett dollartecken ($
) för valutasymbolen, men det förutsätter att valutan är denominerad i dollar. Det finns många andra möjliga valutor runt om i världen, och L
formatelementet kan dynamiskt returnera den lokala valutasymbolen för användarens session.
Se Hur du kontrollerar värdena för NLS-parametrarna om du behöver kontrollera dem.
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 den här funktionen.
Standardformat
Om du utelämnar fmt
argument, konverteras numret till en VARCHAR2
värde exakt tillräckligt länge för att hålla dess signifikanta siffror.
Här är ett exempel på att konvertera ett tal utan att ange formatet:
SELECT TO_CHAR(525.45)
FROM DUAL;
Resultat:
525.45
'nlsparam'
Argument
Den 'nlsparam'
argument kan användas för att specificera 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,
'L99G999D99',
'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,
'C99G999D99',
'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
.
Hur man dämpar stoppningen
Du kanske har märkt att några av exemplen har utfyllnad till vänster om resultaten. Sådan utfyllnad kan tas bort med fm
formatmodifierare.
Exempel:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Resultat:
€1.234,56
Nollargument
Skickar null
resulterar i null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Resultat:
null
Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null
uppstår som ett resultat av en SQL SELECT
påstående.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Argument saknas
Att anropa funktionen utan att skicka några argument resulterar i ett fel:
SELECT TO_CHAR()
FROM DUAL;
Resultat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Att skicka för många argument resulterar också i ett fel:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
Resultat:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"