Oracle
 sql >> Datenbank >  >> RDS >> Oracle

TO_DSINTERVAL()-Funktion in Oracle

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 999999999
  • hours ist eine ganze Zahl zwischen 0 und 23
  • minutes und seconds sind ganze Zahlen zwischen 0 und 59
  • frac_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 und seconds 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 der hours angeben , minutes , oder seconds 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