In Oracle Database der TO_CHAR(datetime) Funktion konvertiert einen datetime- oder Intervallwert in einen VARCHAR2 Wert in dem durch das Datumsformat angegebenen Format.
Syntax
Die Syntax lautet wie folgt:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ]) Wo:
datetimekann ein Wert vonDATEsein ,TIMESTAMP,TIMESTAMPWITHTIMEZONE,TIMESTAMPWITHLOCALTIMEZONEDatentypintervalkann ein Wert vonINTERVALseinDAYTOSECOND, oderINTERVALYEARTOMONTHDatentypfmtist ein optionales Formatmodell, das angibt, wie das Ergebnis formatiert werden soll'nlsparam'ist ein optionales Argument, das die Sprache angibt, in der Monats- und Tagesnamen und Abkürzungen zurückgegeben werden.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL; Ergebnis:
WED, 26 SEPTEMBER 2035
Es hat also das im ersten Argument angegebene Datum in dem durch das zweite Argument angegebenen Format zurückgegeben.
Das zweite Argument liefert das Formatmodell. Das Formatmodell kann aus einem oder mehreren Formatelementen bestehen. Beispiel:DY ist ein Formatelement, ebenso wie DD , MONTH usw.
In dieser vollständigen Liste der Datetime-Formatelemente in Oracle finden Sie eine Liste der Formatelemente, die zum Formatieren von Datetime-Werten mit dieser Funktion verwendet werden können.
Standardformat
Wenn Sie fmt weglassen Argument wird das Ergebnis wie folgt konvertiert:
DATEWerte werden in Werte im Standard-Datumsformat konvertiert.TIMESTAMPundTIMESTAMPWITHLOCALTIMEZONEWerte werden in Werte im Standardzeitstempelformat konvertiert.TIMESTAMPWITHTIMEZONEWerte werden in Werte im Standardzeitstempel mit Zeitzonenformat konvertiert.- Intervallwerte werden in die numerische Darstellung des Intervallliterals umgewandelt.
Hier ist ein Beispiel für die Umwandlung eines DATE Wert ohne Angabe des Formats:
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL; Ergebnis:
26/SEP/35
In diesem Fall ist das Standarddatumsformat meiner Sitzung DD/MON/RR , und das Ergebnis spiegelt dies wider. Ich weiß, dass dies das Standard-Datumsformat meiner Sitzung ist, weil ich die V$NLS_PARAMETERS abgefragt habe Ansicht, die mir den aktuellen Wert der NLS-Parameter anzeigt.
Siehe So überprüfen Sie die Werte der NLS-Parameter, wenn Sie sie überprüfen müssen.
Siehe auch So ändern Sie das Datumsformat Ihrer Sitzung, wenn Sie das Standard-Datum/Uhrzeit-Format für Ihre aktuelle Sitzung ändern möchten.
Intervall
Hier ist ein Beispiel, das einen Intervallwert im Standardformat ausgibt:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL; Ergebnis:
+25-02
Der 'nlsparam' Argument
Der 'nlsparam' Das Argument gibt die Sprache an, in der Monats- und Tagesnamen und Abkürzungen zurückgegeben werden. Dieses Argument kann folgende Form haben:
'NLS_DATE_LANGUAGE = language' Beispiel:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL; Ergebnis:
MIÉ, 26 SEPTIEMBRE 2035
Null-Argumente
Übergabe von null ergibt null :
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL; Ergebnis:
null
Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null tritt als Ergebnis eines SQL SELECT auf Erklärung.
Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.
Fehlendes Argument
Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT TO_CHAR()
FROM DUAL; Ergebnis:
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:
Das Übergeben zu vieler Argumente führt ebenfalls zu einem Fehler:
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL; Ergebnis:
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: