I Oracle Database, TO_CHAR(datetime) funktionen konverterar ett datum och tid eller ett intervallvärde till en VARCHAR2 värde i formatet som anges av datumformatet.
Syntax
Syntaxen ser ut så här:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ]) Var:
datetimekan vara värdetDATE,TIMESTAMP,TIMESTAMPWITHTIMEZONE,TIMESTAMPWITHLOCALTIMEZONEdatatypintervalkan vara värdetINTERVALDAYTOSECOND, ellerINTERVALYEARTOMONTHdatatypfmtär en valfri formatmodell som anger hur resultatet ska formateras'nlsparam'är ett valfritt argument som anger på vilket språk månads- och dagnamn och förkortningar returneras.
Exempel
Här är ett exempel att visa:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL; Resultat:
WED, 26 SEPTEMBER 2035
Så det returnerade datumet som angavs i det första argumentet, i formatet som anges av det andra argumentet.
Det andra argumentet tillhandahåller formatmodellen. Formatmodellen kan bestå av ett eller flera formatelement. Till exempel DY är ett formatelement, liksom DD , MONTH , etc.
Se den här fullständiga listan över Datetime Format Elements i Oracle för en lista över formatelement som kan användas för att formatera datetime-värden med den här funktionen.
Standardformat
Om du utelämnar fmt argument, kommer resultatet att konverteras enligt följande:
DATEvärden konverteras till värden i standarddatumformatet.TIMESTAMPochTIMESTAMPWITHLOCALTIMEZONEvärden konverteras till värden i standardformatet för tidsstämpel.TIMESTAMPWITHTIMEZONEvärden konverteras till värden i standardtidsstämpeln med tidszonsformat.- Intervallvärden konverteras till den numeriska representationen av intervallliteralen.
Här är ett exempel på en konvertering av en DATE värde utan att ange formatet:
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL; Resultat:
26/SEP/35
I det här fallet är min sessions standarddatumformat DD/MON/RR , och så återspeglar resultatet det. Jag vet att detta är min sessions standarddatumformat eftersom jag frågade V$NLS_PARAMETERS vy, som visar mig det aktuella värdet för NLS-parametrarna.
Se Hur du kontrollerar värdena för NLS-parametrarna om du behöver kontrollera dem.
Se även Hur du ändrar din sessions datumformat om du vill ändra standardformatet för datum och tid för din nuvarande session.
Intervall
Här är ett exempel som matar ut ett intervallvärde i standardformatet:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL; Resultat:
+25-02
'nlsparam' Argument
'nlsparam' argument anger språket som månads- och dagnamn och förkortningar returneras på. Detta argument kan ha följande form:
'NLS_DATE_LANGUAGE = language' Exempel:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL; Resultat:
MIÉ, 26 SEPTIEMBRE 2035
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:
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:
Att skicka för många argument resulterar också i ett fel:
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL; Resultat:
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: