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:
datetime
kan vara värdetDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
datatypinterval
kan vara värdetINTERVAL
DAY
TO
SECOND
, ellerINTERVAL
YEAR
TO
MONTH
datatypfmt
ä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:
DATE
värden konverteras till värden i standarddatumformatet.TIMESTAMP
ochTIMESTAMP
WITH
LOCAL
TIME
ZONE
värden konverteras till värden i standardformatet för tidsstämpel.TIMESTAMP
WITH
TIME
ZONE
vä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: