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:
datetime
kann ein Wert vonDATE
sein ,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
Datentypinterval
kann ein Wert vonINTERVAL
seinDAY
TO
SECOND
, oderINTERVAL
YEAR
TO
MONTH
Datentypfmt
ist 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:
DATE
Werte werden in Werte im Standard-Datumsformat konvertiert.TIMESTAMP
undTIMESTAMP
WITH
LOCAL
TIME
ZONE
Werte werden in Werte im Standardzeitstempelformat konvertiert.TIMESTAMP
WITH
TIME
ZONE
Werte 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: