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

TO_DSINTERVAL() Funktion i Oracle

I Oracle Database er TO_DSINTERVAL() funktion konverterer sit argument til en værdi på INTERVAL DAY TO SECOND datatype.

Syntaks

Syntaksen ser sådan ud:

TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] ) 

Så 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.

Syntaksen for sql_format går sådan her:

[+ | -] days hours : minutes : seconds [. frac_secs ]

Hvor:

  • days er et heltal mellem 0 og 999999999
  • hours er et heltal mellem 0 og 23
  • minutes og seconds er heltal mellem 0 og 59
  • frac_secs er brøkdelen af ​​sekunder mellem .0 og .999999999.
  • En eller flere tomme felter adskiller dage fra timer. Yderligere tomrum er tilladt mellem formatelementer.

Og syntaksen for ds_iso_format :

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

Hvor:

  • days , hours , minutes og seconds er heltal mellem 0 og 999999999.
  • frac_secs er brøkdelen af ​​sekunder mellem .0 og .999999999.
  • 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.

Eksempler

Her er nogle eksempler til demonstration.

SQL-format

Her sender jeg argumentet i SQL-format:

SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL; 

Resultat:

+135 08:35:47.123456789

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

SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL; 

Resultat:

-135 08:35:47.123456789

ISO-format

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

SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL; 

Resultat:

+135 08:35:47.123456789

Her er det med en negativ værdi:

SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL; 

Resultat:

-135 08:35:47.123456789

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 DAY TO SECOND type.

Eksempel:

SELECT 
    TO_DSINTERVAL(
    'Oops!'
    DEFAULT '00 00:00:00' ON CONVERSION ERROR
    )
FROM DUAL; 

Resultat:

+00 00:00:00.000000

Nul-argumenter

Sender null resulterer i null :

SET NULL 'null';
SELECT 
    TO_DSINTERVAL(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 argumentantal

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

SELECT TO_DSINTERVAL()
FROM DUAL; 

Resultat:

Fejl starter på linje :1 i kommando -SELECT TO_DSINTERVAL()FROM DUALE Fejl på kommandolinje :1 Kolonne :8Fejlrapport -SQL Fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter for funktion"*Årsag:*Handling:

Og at sende for mange argumenter resulterer i en fejl:

SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL; 

Resultat:

Fejl starter på linje:1 i kommando -SELECT TO_DSINTERVAL('P135D', 'P135D')FRA DUALFejlrapport -ORA-12702:ugyldig NLS-parameterstreng brugt i SQL-funktion

  1. Beregn forskel mellem 2 dato/klokkeslæt i Oracle SQL

  2. SQRT() Funktion i Oracle

  3. Oracle datoforskel for at få antal år

  4. Oracle Fast Recovery Area