I Oracle Database er TO_CHAR(number)
funktion konverterer et tal til en VARCHAR2
værdi i formatet angivet af formatargumentet.
Syntaks
Syntaksen ser sådan ud:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Hvor:
n
kan være af typenNUMBER
,BINARY_FLOAT
, ellerBINARY_DOUBLE
.fmt
er en valgfri formatmodel, der specificerer, hvordan resultatet skal formateres. Se de gyldige talformatelementer, der kan bruges til at konstruere din formatmodel.'nlsparam'
er et valgfrit argument, der specificerer, hvordan forskellige tegn returneres. Du kan bruge den til at angive decimaltegn og gruppeseparator, det lokale valutasymbol og det internationale valutasymbol. Hvis dette argument udelades, bruges standardværdierne for den aktuelle session.
Eksempel
Her er et eksempel for at demonstrere, hvordan funktionen fungerer:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Resultat:
RESULT __________ 12,345
Det første argument er det faktiske tal, som vi formaterer, og det andet argument er formatmodellen. Formatmodellen angiver, hvordan tallet formateres.
I dette tilfælde formaterer vores formatmodel tallet med en gruppeseparator i den passende position. Hvert numerisk ciffer er repræsenteret af 9
, og gruppeseparatoren er repræsenteret af G
.
Her er, hvad der sker, hvis vi ændrer formatmodellen lidt:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Resultat:
RESULT ___________ 012,345
I dette tilfælde startede vi formatmodellen med en 0
Karakter. Dette returnerer et indledende nul, hvor det er relevant. 9
tegn returnerer ikke foranstillede nuller.
Faktisk kunne vi erstatte alle 9
s med 0
hvis vi vil. Her er en sammenligning, der viser, hvordan resultaterne kan variere ganske betydeligt, afhængigt af hvilket formatelement du bruger:
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Resultat:
000G000 999G999 ___________ ___________ 000,012 12
Valutasymboler
Du kan bruge L
formatelement for at returnere det lokale valutasymbol.
Eksempel:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Resultat:
RESULT _______________________ $12,345.00
Dette eksempel bruger en formatmodel, der udlæser resultatet ved hjælp af det lokale valutasymbol (repræsenteret ved L
), en gruppeseparator (repræsenteret ved G
), et decimaltegn (repræsenteret ved D
), og selvfølgelig hvert numerisk ciffer (repræsenteret ved 9
).
Det lokale valutasymbol bestemmes af den aktuelle værdi af NLS_CURRENCY
parameter. Det er rigtigt, at vi kunne have brugt et dollartegn ($
) for valutasymbolet, men det forudsætter, at valutaen er denomineret i dollars. Der er mange andre mulige valutaer rundt om i verden, og L
formatelementet er i stand til dynamisk at returnere det lokale valutasymbol for brugerens session.
Se, hvordan du kontrollerer værdierne af NLS-parametrene, hvis du har brug for at kontrollere dem.
Se denne fulde liste over talformatelementer i Oracle for en liste over formatelementer, der kan bruges til at formatere tal med denne funktion.
Standardformat
Hvis du udelader fmt
argument, konverteres tallet til en VARCHAR2
værdi præcis lang nok til at holde dens signifikante cifre.
Her er et eksempel på en konvertering af et tal uden at angive formatet:
SELECT TO_CHAR(525.45)
FROM DUAL;
Resultat:
525.45
'nlsparam'
Argument
'nlsparam'
argument kan bruges til at specificere 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,
'L99G999D99',
'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,
'C99G999D99',
'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
.
Sådan undertrykkes polstringen
Du har måske bemærket, at nogle af eksemplerne har udfyldning til venstre for resultaterne. Sådan polstring kan fjernes med fm
formatmodifikator.
Eksempel:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Resultat:
€1.234,56
Nul-argumenter
Sender null
resulterer i null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Resultat:
null
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Manglende argument
Kaldning af funktionen uden at sende nogen argumenter resulterer i en fejl:
SELECT TO_CHAR()
FROM DUAL;
Resultat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Hvis du sender for mange argumenter, resulterer det også i en fejl:
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"