In der Oracle-Datenbank das TO_DSINTERVAL()
Funktion konvertiert ihr Argument in einen Wert von INTERVAL DAY TO SECOND
Datentyp.
Syntax
Die Syntax lautet wie folgt:
TO_DSINTERVAL ( ' { sql_format | ds_iso_format } '
[ DEFAULT return_value ON CONVERSION ERROR ] )
Sie haben also die Möglichkeit, das Argument im SQL-Format oder im ISO-Format zu übergeben.
Hier ist der Unterschied:
sql_format
ist ein SQL-Intervallformat, das mit dem SQL-Standard (ISO/IEC 9075) kompatibel ist.ds_iso_format
ist ein ISO-Dauerformat, das mit dem ISO 8601:2004-Standard kompatibel ist.
Die Syntax für sql_format
geht so:
[+ | -] days hours : minutes : seconds [. frac_secs ]
Wo:
days
ist eine ganze Zahl zwischen 0 und 999999999hours
ist eine ganze Zahl zwischen 0 und 23minutes
undseconds
sind ganze Zahlen zwischen 0 und 59frac_secs
ist der Sekundenbruchteil zwischen 0,0 und 0,999999999.- Ein oder mehrere Leerzeichen trennen Tage von Stunden. Zwischen Formatelementen sind zusätzliche Leerzeichen erlaubt.
Und die Syntax für ds_iso_format
:
[-] P [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Wo:
days
,hours
,minutes
undseconds
sind ganze Zahlen zwischen 0 und 999999999.frac_secs
ist der Sekundenbruchteil zwischen 0,0 und 0,999999999.- Leerzeichen sind im Wert nicht erlaubt.
- Wenn Sie
T
angeben , dann müssen Sie mindestens eine derhours
angeben ,minutes
, oderseconds
Werte.
Beispiele
Hier sind einige Beispiele zur Veranschaulichung.
SQL-Format
Hier übergebe ich das Argument im SQL-Format:
SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;
Ergebnis:
+135 08:35:47.123456789
Wir können ihm bei Bedarf sein Vorzeichen voranstellen. Drehen wir es um ins Negative:
SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;
Ergebnis:
-135 08:35:47.123456789
ISO-Format
In diesem Beispiel übergebe ich den gleichen Wert, aber im ISO-Format:
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;
Ergebnis:
+135 08:35:47.123456789
Hier ist es mit einem negativen Wert:
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;
Ergebnis:
-135 08:35:47.123456789
Bei Konvertierungsfehler einen Standardwert angeben
Sie haben auch die Möglichkeit, einen Wert anzugeben, der zurückgegeben werden soll, falls beim Konvertieren des Arguments in ein INTERVAL DAY TO SECOND
ein Fehler auftritt Typ.
Beispiel:
SELECT
TO_DSINTERVAL(
'Oops!'
DEFAULT '00 00:00:00' ON CONVERSION ERROR
)
FROM DUAL;
Ergebnis:
+00 00:00:00.000000
Null-Argumente
Übergabe von null
ergibt null
:
SET NULL 'null';
SELECT
TO_DSINTERVAL(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.
Ungültige Argumentanzahl
Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT TO_DSINTERVAL()
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT TO_DSINTERVAL() 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:
Und das Übergeben zu vieler Argumente führt zu einem Fehler:
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT TO_DSINTERVAL('P135D', 'P135D') FROM DUAL Error report - ORA-12702: invalid NLS parameter string used in SQL function