sql >> Database teknologi >  >> RDS >> Oracle

TO_YMINTERVAL() Funktion i Oracle

I Oracle Database er TO_YMINTERVAL() funktion konverterer sit argument til en værdi på INTERVAL MONTH TO YEAR datatype.

Syntaks

Syntaksen ser sådan ud:

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

Du har mulighed for at sende argumentet i SQL-format eller ISO-format.

Her er forskellen:

  • sql_format er SQL-intervalformat, der er kompatibelt med SQL-standarden (ISO/IEC 9075).
  • ds_iso_format er ISO-varighedsformatet kompatibelt med ISO 8601:2004-standarden.

I SQL-format, years er et heltal mellem 0 og 999999999 og months er et heltal mellem 0 og 11. Yderligere tomme felter er tilladt mellem formatelementer.

I ISO-format (syntaks nedenfor) er år og måneder heltal mellem 0 og 999999999. Dage, hours , minutes , seconds , og frac_secs er ikke-negative heltal og ignoreres, hvis det er angivet. Ingen tomme felter er tilladt i værdien. Hvis du angiver T , så skal du angive mindst én af hours , minutes eller seconds værdier.

Syntaksen for ds_iso_format går sådan her:

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

Eksempler

Her er nogle eksempler til demonstration.

SQL-format

Her sender jeg argumentet i SQL-format:

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

Resultat:

+01-02

I dette tilfælde bestod jeg et år og to måneder i SQL-format.

Vi kan forsætte den med sit tegn, hvis det er nødvendigt. Lad os vende det rundt til et negativt:

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

Resultat:

-01-02

ISO-format

I dette eksempel sender jeg den samme værdi, men i ISO-format:

SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL; 

Resultat:

+01-02

Her er det med en negativ værdi:

SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL; 

Resultat:

-01-02

Angiv en standardværdi ved konverteringsfejl

Du har også mulighed for at angive en værdi, der skal returneres i tilfælde af, at der er en fejl under konvertering af argumentet til en INTERVAL MONTH TO YEAR type.

Eksempel:

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

Resultat:

+00-00

Nul-argumenter

Sender null resulterer i null :

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

Resultat:

null

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Ugyldigt antal argumenter

Kaldning af funktionen uden at sende nogen argumenter, resulterer i en fejl:

SELECT TO_YMINTERVAL()
FROM DUAL; 

Resultat:

SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter til funktion

Og at sende for mange argumenter resulterer i en fejl:

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

Resultat:

SQL-fejl:ORA-00939:for mange argumenter for funktion00939. 00000 - "for mange argumenter for funktion"

  1. Sådan forbinder du flere databaser i PHP, MYSQLi &PDO

  2. PostgreSQL-indeks bruges ikke til forespørgsel på IP-områder

  3. Hvordan eksporteres forespørgselsresultat til csv i Oracle SQL Developer?

  4. MariaDB USER() Forklaret