In Oracle Database, de TO_CHAR(datetime) functie converteert een datetime of intervalwaarde naar een VARCHAR2 waarde in het formaat gespecificeerd door het datumformaat.
Syntaxis
De syntaxis gaat als volgt:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ]) Waar:
datetimekan een waarde zijn vanDATE,TIMESTAMP,TIMESTAMPWITHTIMEZONE,TIMESTAMPWITHLOCALTIMEZONEgegevenstypeintervalkan een waarde zijn vanINTERVALDAYTOSECOND, ofINTERVALYEARTOMONTHgegevenstypefmtis een optioneel formaatmodel dat specificeert hoe het resultaat moet worden opgemaakt'nlsparam'is een optioneel argument dat de taal specificeert waarin maand- en dagnamen en afkortingen worden geretourneerd.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL; Resultaat:
WED, 26 SEPTEMBER 2035
Het gaf dus de datum terug die in het eerste argument was opgegeven, in het formaat gespecificeerd door het tweede argument.
Het tweede argument levert het formaatmodel. Het formaatmodel kan uit één of meerdere formaatelementen bestaan. Bijvoorbeeld DY is een formaatelement, net als DD , MONTH , enz.
Zie deze volledige lijst met datum/tijd-indelingselementen in Oracle voor een lijst met opmaakelementen die kunnen worden gebruikt om datum/tijd-waarden op te maken met deze functie.
Standaardformaat
Als u de fmt . weglaat argument, wordt het resultaat als volgt geconverteerd:
DATEwaarden worden geconverteerd naar waarden in de standaard datumnotatie.TIMESTAMPenTIMESTAMPWITHLOCALTIMEZONEwaarden worden geconverteerd naar waarden in het standaard tijdstempelformaat.TIMESTAMPWITHTIMEZONEwaarden worden geconverteerd naar waarden in de standaard tijdstempel met tijdzone-indeling.- Intervalwaarden worden geconverteerd naar de numerieke weergave van de letterlijke interval.
Hier is een voorbeeld van het converteren van een DATE waarde zonder het formaat op te geven:
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL; Resultaat:
26/SEP/35
In dit geval is het standaard datumformaat van mijn sessie DD/MON/RR , en dus weerspiegelt het resultaat dat. Ik weet dat dit de standaard datumnotatie van mijn sessie is omdat ik de V$NLS_PARAMETERS heb opgevraagd weergave, die me de huidige waarde van de NLS-parameters laat zien.
Zie Hoe u de waarden van de NLS-parameters kunt controleren als u ze moet controleren.
Zie ook Hoe u de datumnotatie van uw sessie kunt wijzigen als u de standaard datum-/tijdnotatie voor uw huidige sessie wilt wijzigen.
Interval
Hier is een voorbeeld dat een intervalwaarde in het standaardformaat uitvoert:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL; Resultaat:
+25-02
De 'nlsparam' Argument
De 'nlsparam' argument specificeert de taal waarin maand- en dagnamen en afkortingen worden geretourneerd. Dit argument kan de volgende vorm hebben:
'NLS_DATE_LANGUAGE = language' Voorbeeld:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL; Resultaat:
MIÉ, 26 SEPTIEMBRE 2035
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:
Error starting at line : 1 in command - SELECT TO_CHAR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Het doorgeven van te veel argumenten resulteert ook in een fout:
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL; Resultaat:
Error starting at line : 1 in command - SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' ) FROM DUAL Error at Command Line : 1 Column : 72 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: