In der Oracle-Datenbank das TO_DATE() Funktion konvertiert ihr Argument in einen Wert von DATE Datentyp.
Syntax
Die Syntax lautet wie folgt:
TO_DATE(char [ DEFAULT return_value ON CONVERSION ERROR ]
[, fmt [, 'nlsparam' ] ])
Das char Argument kann ein beliebiger Ausdruck sein, der zu einer Zeichenfolge von CHAR ausgewertet wird , VARCHAR2 , NCHAR , oder NVARCHAR2 Datentyp.
Das optionale fmt gibt das Format von char an . Wenn Sie fmt weglassen , dann char muss im standardmäßigen Datumsformat vorliegen. Das Standarddatumsformat wird durch NLS_DATE_FORMAT bestimmt Initialisierungsparameter, der selbst implizit von NLS_TERRITORY gesetzt wird Parameter, kann aber auch explizit gesetzt werden (siehe How to Check the Date Format of your Oracle Session).
Der optionale 'nlsparam' Das Argument gibt die Sprache an, in der Monats- und Tagesnamen und Abkürzungen bereitgestellt werden. Es hat folgende Form:
'NLS_DATE_LANGUAGE = language' Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung:
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR'
)
FROM DUAL; Ergebnis:
25/AUG/30
Das Format des Ergebnisses wird durch das NLS_DATE_FORMAT Ihrer Sitzung bestimmt Parameter. Wir können den Wert von NLS_DATE_FORMAT überprüfen Parameter durch Abfrage der V$NLS_PARAMETERS Ansicht:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT'; Ergebnis:
DD/MON/RR
Der Standardwert von NLS_TIMESTAMP_FORMAT Der Parameter wird von NLS_TERRITORY abgeleitet Parameter. In meinem Fall der NLS_TERRITORY Parameter ist AUSTRALIA .
Folgendes passiert, wenn ich NLS_TERRITORY ändere Parameter in ein anderes Gebiet, und rufen Sie dann TO_TIMESTAMP() auf nochmal:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR'
)
FROM DUAL; Ergebnis:
25-AUG-30
Diesmal wird das Ergebnis in einem anderen Format zurückgegeben.
Alternativ können Sie den Wert von NLS_TIMESTAMP_FORMAT ändern Parameter direkt. Dadurch wird dieser Parameter geändert, ohne andere Parameter zu beeinflussen. Weitere Informationen und Beispiele finden Sie unter So ändern Sie das Datumsformat in Ihrer Oracle-Sitzung.
Standardformat
In diesem Beispiel lasse ich den fmt weg Argument:
SELECT
TO_DATE(
'25-AUG-30'
)
FROM DUAL; Ergebnis:
25-AUG-30
Dabei muss das Argument das Standardformat DATE haben Datentyp, der durch NLS_DATE_FORMAT bestimmt wird Initialisierungsparameter.
Hier ist ein Beispiel dafür, was passiert, wenn wir einen Wert übergeben, der nicht diesem Format entspricht:
SELECT
TO_DATE(
'2030-08-25'
)
FROM DUAL; Ergebnis:
Error report - ORA-01861: literal does not match format string
Um dies zu beheben, müsste ich entweder meine Eingabe ändern oder den Wert von NLS_DATE_FORMAT ändern Parameter.
Es ist im Allgemeinen keine gute Praxis, das Formatmodell wegzulassen. Mit anderen Worten, es ist eine gute Praxis, immer ein Formatmodell bereitzustellen, wenn Sie diese Funktion verwenden. Hier ist eine vollständige Liste der datetime-Formatelemente, die beim Erstellen eines Formatmodells verwendet werden können.
Bei Konvertierungsfehler einen Standardwert angeben
Sie haben auch die Möglichkeit, einen Wert bereitzustellen, der zurückgegeben werden soll, falls beim Konvertieren des Arguments in ein DATE ein Fehler auftritt Typ.
Beispiel:
SET NULL 'null';
SELECT
TO_DATE(
'Oops!'
DEFAULT null ON CONVERSION ERROR
)
FROM DUAL; Ergebnis:
null
In diesem Fall habe ich diesen null angegeben sollte zurückgegeben werden, wenn ein Konvertierungsfehler auftritt.
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.
Der 'nlsparam' Argument
Der optionale 'nlsparam' Das Argument gibt die Sprache an, in der Monats- und Tagesnamen und Abkürzungen bereitgestellt werden. Es hat folgende Form:
'NLS_DATE_LANGUAGE = language' Beispiel
SELECT
TO_DATE(
'25-agosto-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL; Ergebnis:
25-AUG-30
Beachten Sie, dass das Ergebnis weiterhin gemäß dem NLS_DATE_FORMAT der aktuellen Sitzung zurückgegeben wird Parameter. Es ist nur die Eingabe war in einer anderen Sprache.
Folgendes passiert, wenn ich agosto ändere bis August unter Verwendung desselben 'nlsparam' Wert:
SELECT
TO_DATE(
'25-August-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL; Ergebnis:
Error report - ORA-01843: not a valid month
Dies geschah, weil ich das Datum nicht in der durch 'nlsparam' angegebenen Sprache angegeben habe Argument (Spanisch).
Ändere es auf English löst dieses Problem:
SELECT
TO_DATE(
'25-August-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = English'
)
FROM DUAL; Ergebnis:
25-AUG-30
Siehe So geben Sie eine Liste der unterstützten Sprachen in Oracle zurück, wenn es hilft.
Null-Argumente
Übergabe von null ergibt null :
SET NULL 'null';
SELECT
TO_DATE(null)
FROM DUAL; Ergebnis:
null
Ungültige Argumentanzahl
Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT TO_DATE()
FROM DUAL; Ergebnis:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Und das Übergeben zu vieler Argumente führt ebenfalls zu einem Fehler:
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR',
'NLS_DATE_LANGUAGE = English',
'Gosh',
'Dang'
)
FROM DUAL; Ergebnis:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"