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_formater SQL-intervalformat, der er kompatibelt med SQL-standarden (ISO/IEC 9075).ds_iso_formater ISO-varighedsformatet kompatibelt med ISO 8601:2004-standarden.
Syntaksen for sql_format går sådan her:
[+ | -] days hours : minutes : seconds [. frac_secs ] Hvor:
dayser et heltal mellem 0 og 999999999hourser et heltal mellem 0 og 23minutesogsecondser heltal mellem 0 og 59frac_secser 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,minutesogsecondser heltal mellem 0 og 999999999.frac_secser 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 afhours,minutesellersecondsvæ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