sql >> Databasteknik >  >> RDS >> Oracle

TO_YMINTERVAL() Funktion i Oracle

I Oracle Database, TO_YMINTERVAL() funktion konverterar sitt argument till värdet INTERVAL MONTH TO YEAR datatyp.

Syntax

Syntaxen ser ut så här:

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

Du har möjlighet att skicka argumentet i SQL-format eller ISO-format.

Här är skillnaden:

  • sql_format är SQL-intervallformat kompatibelt med SQL-standarden (ISO/IEC 9075).
  • ds_iso_format är ISO-varaktighetsformat kompatibelt med ISO 8601:2004-standarden.

I SQL-format, years är ett heltal mellan 0 och 999999999 och months är ett heltal mellan 0 och 11. Ytterligare tomrum är tillåtna mellan formatelement.

I ISO-format (syntax nedan) är år och månader heltal mellan 0 och 999999999. Dagar, hours , minutes , seconds och frac_secs är icke-negativa heltal och ignoreras, om det anges. Inga blanksteg är tillåtna i värdet. Om du anger T , då måste du ange minst en av hours , minutes , eller seconds värden.

Syntaxen för ds_iso_format går så här:

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

Exempel

Här är några exempel att visa.

SQL-format

Här skickar jag argumentet i SQL-format:

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

Resultat:

+01-02

I det här fallet klarade jag ett år och två månader i SQL-format.

Vi kan förse den med dess tecken om det behövs. Låt oss vända det till ett negativt:

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

Resultat:

-01-02

ISO-format

I det här exemplet skickar jag samma värde, men i ISO-format:

SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;

Resultat:

+01-02

Här är det med ett negativt värde:

SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;

Resultat:

-01-02

Ange ett standardvärde vid konverteringsfel

Du har också möjlighet att ange ett värde som ska returneras i händelse av att det uppstår ett fel när argumentet konverteras till en INTERVAL MONTH TO YEAR typ.

Exempel:

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

Resultat:

+00-00

Nollargument

Skickar null resulterar i null :

SET NULL 'null';
SELECT 
    TO_YMINTERVAL(null)
FROM DUAL;

Resultat:

null

Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Ogiltigt antal argument

Att anropa funktionen utan att skicka några argument resulterar i ett fel:

SELECT TO_YMINTERVAL()
FROM DUAL;

Resultat:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function

Och att skicka för många argument resulterar i ett fel:

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

Resultat:

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

  1. Vad är en vy i Oracle?

  2. Hur kan jag hitta alla tabeller i MySQL med specifika kolumnnamn i dem?

  3. SQL - Uppdatera flera poster i en fråga

  4. Favorittrick för att trimma prestanda