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

TO_YMINTERVAL()-Funktion in Oracle

In der Oracle-Datenbank der TO_YMINTERVAL() Funktion konvertiert ihr Argument in einen Wert von INTERVAL MONTH TO YEAR Datentyp.

Syntax

Die Syntax lautet wie folgt:

TO_YMINTERVAL
  ( '  { [+|-] years - months 
       | ym_iso_format 
       } '
    [ DEFAULT return_value ON CONVERSION ERROR ]
  )

Sie haben die Möglichkeit, das Argument im SQL-Format oder im ISO-Format zu übergeben.

Hier ist der Unterschied:

  • sql_format ist ein mit dem SQL-Standard (ISO/IEC 9075) kompatibles SQL-Intervallformat.
  • ds_iso_format ist ein ISO-Dauerformat, das mit dem ISO 8601:2004-Standard kompatibel ist.

Im SQL-Format years ist eine ganze Zahl zwischen 0 und 999999999 und months ist eine ganze Zahl zwischen 0 und 11. Zwischen den Formatelementen sind zusätzliche Leerzeichen erlaubt.

Im ISO-Format (Syntax unten) sind Jahre und Monate Ganzzahlen zwischen 0 und 999999999. Tage, hours , minutes , seconds und frac_secs sind nicht negative ganze Zahlen und werden ignoriert, falls angegeben. Im Wert sind keine Leerzeichen erlaubt. Wenn Sie T angeben , dann müssen Sie mindestens eine der hours angeben , minutes , oder seconds Werte.

Die Syntax für ds_iso_format geht so:

[-] P [ years Y ] [months M] [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Beispiele

Hier sind einige Beispiele zur Veranschaulichung.

SQL-Format

Hier übergebe ich das Argument im SQL-Format:

SELECT TO_YMINTERVAL('1-2')
FROM DUAL;

Ergebnis:

+01-02

In diesem Fall habe ich ein Jahr und zwei Monate im SQL-Format verbracht.

Wir können ihm bei Bedarf sein Vorzeichen voranstellen. Drehen wir es um ins Negative:

SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;

Ergebnis:

-01-02

ISO-Format

In diesem Beispiel übergebe ich den gleichen Wert, aber im ISO-Format:

SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;

Ergebnis:

+01-02

Hier ist es mit einem negativen Wert:

SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;

Ergebnis:

-01-02

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 MONTH TO YEAR ein Fehler auftritt Typ.

Beispiel:

SELECT 
    TO_YMINTERVAL(
    '1y-02m'
    DEFAULT '00-00' ON CONVERSION ERROR
    )
FROM DUAL;

Ergebnis:

+00-00

Null-Argumente

Übergabe von null ergibt null :

SET NULL 'null';
SELECT 
    TO_YMINTERVAL(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_YMINTERVAL()
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 zu einem Fehler:

SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;

Ergebnis:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"