I Oracle Database er TO_CHAR(datetime)
funktion konverterer en datetime eller intervalværdi til en VARCHAR2
værdi i formatet angivet af datoformatet.
Syntaks
Syntaksen ser sådan ud:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])
Hvor:
datetime
kan være en værdi påDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
datatypeinterval
kan være en værdi påINTERVAL
DAY
TO
SECOND
ellerINTERVAL
YEAR
TO
MONTH
datatypefmt
er en valgfri formatmodel, der specificerer, hvordan resultatet skal formateres'nlsparam'
er et valgfrit argument, der angiver det sprog, som måneds- og dagsnavne og forkortelser returneres på.
Eksempel
Her er et eksempel til demonstration:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;
Resultat:
WED, 26 SEPTEMBER 2035
Så den returnerede datoen, der blev angivet i det første argument, i formatet angivet af det andet argument.
Det andet argument giver formatmodellen. Formatmodellen kan bestå af et eller flere formatelementer. For eksempel DY
er et formatelement, ligesom DD
er , MONTH
osv.
Se denne fulde liste over Datetime Format Elements i Oracle for en liste over formatelementer, der kan bruges til at formatere datetime-værdier med denne funktion.
Standardformat
Hvis du udelader fmt
argument, vil resultatet blive konverteret som følger:
DATE
værdier konverteres til værdier i standarddatoformatet.TIMESTAMP
ogTIMESTAMP
WITH
LOCAL
TIME
ZONE
værdier konverteres til værdier i standardtidsstempelformatet.TIMESTAMP
WITH
TIME
ZONE
værdier konverteres til værdier i standardtidsstemplet med tidszoneformat.- Intervalværdier konverteres til den numeriske repræsentation af intervalliteralen.
Her er et eksempel på en konvertering af en DATE
værdi uden at angive formatet:
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;
Resultat:
26/SEP/35
I dette tilfælde er min sessions standarddatoformat DD/MON/RR
, og så afspejler resultatet det. Jeg ved, at dette er min sessions standarddatoformat, fordi jeg forespurgte V$NLS_PARAMETERS
visning, som viser mig den aktuelle værdi af NLS-parametrene.
Se, hvordan du kontrollerer værdierne for NLS-parametrene, hvis du har brug for at kontrollere dem.
Se også, hvordan du ændrer din sessions datoformat, hvis du vil ændre standard dato-tidsformat for din aktuelle session.
Interval
Her er et eksempel, der udsender en intervalværdi i standardformatet:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;
Resultat:
+25-02
'nlsparam'
Argument
'nlsparam'
argument angiver det sprog, som måneds- og dagnavne og forkortelser returneres på. Dette argument kan have følgende form:
'NLS_DATE_LANGUAGE = language'
Eksempel:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Resultat:
MIÉ, 26 SEPTIEMBRE 2035
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:
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:
Hvis du sender for mange argumenter, resulterer det også i en fejl:
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: