In der Oracle-Datenbank der TO_TIMESTAMP()
Funktion konvertiert ihr Argument in einen Wert von TIMESTAMP
Datentyp.
Syntax
Die Syntax lautet wie folgt:
TO_TIMESTAMP(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 Standardformat des TIMESTAMP
vorliegen Datentyp, der durch NLS_TIMESTAMP_FORMAT
bestimmt wird Initialisierungsparameter (siehe So überprüfen Sie das Datumsformat Ihrer Oracle-Sitzung).
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_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF'
)
FROM DUAL;
Ergebnis:
25/AUG/30 06:10:35.123456789 PM
Das Format des Ergebnisses wird durch den NLS_TIMESTAMP_FORMAT
Ihrer Sitzung bestimmt Parameter. Wir können den Wert von NLS_TIMESTAMP_FORMAT
überprüfen Parameter durch Abfrage der V$NLS_PARAMETERS
Ansicht:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';
Ergebnis:
DD/MON/RR HH12:MI:SSXFF AM
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_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF'
)
FROM DUAL;
Ergebnis:
25-AUG-30 06.10.35.123456789 PM
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_TIMESTAMP(
'25-AUG-30 06.10.35.123456789 PM'
)
FROM DUAL;
Ergebnis:
25-AUG-30 06.10.35.123456789 PM
Dabei muss das Argument im Standardformat des TIMESTAMP
vorliegen Datentyp, der durch NLS_TIMESTAMP_FORMAT
bestimmt wird Initialisierungsparameter.
Hier ist ein Beispiel dafür, was passiert, wenn wir einen Wert übergeben, der nicht diesem Format entspricht:
SELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789'
)
FROM DUAL;
Ergebnis:
ORA-01849: hour must be between 1 and 12 01849. 00000 - "hour must be between 1 and 12" *Cause: *Action:
In diesem Fall habe ich einen Wert übergeben, der die 24-Stunden-Zeit verwendet, aber mein NLS_TIMESTAMP_FORMAT
Der Parameter gibt eine 12-Stunden-Uhr mit der Bezeichnung AM/PM an.
Um dies zu beheben, müsste ich entweder meine Eingabe ändern oder den Wert von NLS_TIMESTAMP_FORMAT
ändern Parameter.
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 einen TIMESTAMP
ein Fehler auftritt Typ.
Beispiel:
SET NULL 'null';
SELECT
TO_TIMESTAMP(
'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_TIMESTAMP(
'25-agosto-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Ergebnis:
25-AUG-30 06.10.35.123456789 PM
Beachten Sie, dass das Ergebnis immer noch gemäß dem NLS_TIMESTAMP_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_TIMESTAMP(
'25-August-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Ergebnis:
ORA-01843: not a valid month 01843. 00000 - "not a valid month" *Cause: *Action:
Dies geschah, weil ich das Datum nicht in der durch 'nlsparam'
angegebenen Sprache angegeben hatte Argument (Spanisch).
Ändere es auf English
löst dieses Problem:
SELECT
TO_TIMESTAMP(
'25-August-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = English'
)
FROM DUAL;
Ergebnis:
25-AUG-30 06.10.35.123456789 PM
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_TIMESTAMP(null)
FROM DUAL;
Ergebnis:
null
Ungültige Argumentanzahl
Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT TO_TIMESTAMP()
FROM DUAL;
Ergebnis:
ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action: Error at Line: 8 Column: 8
Das Übergeben zu vieler Argumente scheint jedoch keine Probleme zu verursachen, solange die ersten drei gültig sind:
SELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = English',
'Oops!',
'Dang!',
'Homer',
'Symptom'
)
FROM DUAL;
Ergebnis:
25-AUG-30 06.10.35.123456789 PM