In Oracle Database, de TO_CHAR(number)
functie converteert een getal naar een VARCHAR2
waarde in het formaat gespecificeerd door het formaat argument.
Syntaxis
De syntaxis gaat als volgt:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Waar:
n
kan van het typeNUMBER
. zijn ,BINARY_FLOAT
, ofBINARY_DOUBLE
.fmt
is een optioneel formaatmodel dat aangeeft hoe het resultaat moet worden opgemaakt. Bekijk de geldige getalnotatie-elementen die kunnen worden gebruikt om uw notatiemodel te construeren.'nlsparam'
is een optioneel argument dat aangeeft hoe verschillende tekens worden geretourneerd. U kunt het gebruiken om het decimale teken en het groepsscheidingsteken, het lokale valutasymbool en het internationale valutasymbool op te geven. Als dit argument wordt weggelaten, worden de standaardwaarden voor de huidige sessie gebruikt.
Voorbeeld
Hier is een voorbeeld om te demonstreren hoe de functie werkt:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Resultaat:
RESULT __________ 12,345
Het eerste argument is het werkelijke aantal dat we opmaken, en het tweede argument is het formaatmodel. Het formaatmodel geeft aan hoe het getal wordt opgemaakt.
In dit geval maakt ons formaatmodel het getal op met een groepsscheidingsteken op de juiste positie. Elk numeriek cijfer wordt vertegenwoordigd door 9
, en het groepsscheidingsteken wordt weergegeven door G
.
Dit is wat er gebeurt als we het formaatmodel enigszins wijzigen:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Resultaat:
RESULT ___________ 012,345
In dit geval zijn we het formaatmodel begonnen met een 0
karakter. Dit retourneert waar van toepassing een voorloopnul. De 9
karakter geeft geen voorloopnullen terug.
We zouden zelfs alle 9
. kunnen vervangen s met 0
s als we willen. Hier is een vergelijking die laat zien hoe de resultaten behoorlijk kunnen verschillen, afhankelijk van welk formaatelement je gebruikt:
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Resultaat:
000G000 999G999 ___________ ___________ 000,012 12
Valutasymbolen
U kunt de L
. gebruiken format-element om het lokale valutasymbool te retourneren.
Voorbeeld:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Resultaat:
RESULT _______________________ $12,345.00
In dit voorbeeld wordt een formaatmodel gebruikt dat het resultaat uitvoert met het lokale valutasymbool (weergegeven door L
), een groepsscheidingsteken (weergegeven door G
), een decimaal teken (weergegeven door D
), en natuurlijk elk numeriek cijfer (weergegeven door 9
).
Het lokale valutasymbool wordt bepaald door de huidige waarde van de NLS_CURRENCY
parameter. Het is waar dat we een dollarteken hadden kunnen gebruiken ($
) voor het valutasymbool, maar dat veronderstelt dat de valuta in dollars is uitgedrukt. Er zijn veel andere mogelijke valuta's over de hele wereld, en de L
format-element kan het lokale valutasymbool dynamisch retourneren voor de sessie van de gebruiker.
Zie Hoe u de waarden van de NLS-parameters kunt controleren als u ze moet controleren.
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 deze functie.
Standaardformaat
Als u de fmt
. weglaat argument, wordt het getal geconverteerd naar een VARCHAR2
waarde precies lang genoeg om de significante cijfers vast te houden.
Hier is een voorbeeld van het converteren van een getal zonder het formaat op te geven:
SELECT TO_CHAR(525.45)
FROM DUAL;
Resultaat:
525.45
De 'nlsparam'
Argument
De 'nlsparam'
argument kan worden gebruikt om het decimaalteken 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,
'L99G999D99',
'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,
'C99G999D99',
'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
.
Hoe de vulling te onderdrukken
Het is u misschien opgevallen dat op sommige voorbeelden links van de resultaten opvulling is toegepast. Dergelijke opvulling kan worden verwijderd met de fm
formaatmodificator.
Voorbeeld:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Resultaat:
€1.234,56
Nullargumenten
Doorgeven van null
resulteert in null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Resultaat:
null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Ontbrekend argument
Het aanroepen van de functie zonder argumenten door te geven, resulteert in een fout:
SELECT TO_CHAR()
FROM DUAL;
Resultaat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Het doorgeven van te veel argumenten resulteert ook in een fout:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
Resultaat:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"