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 999999999hours
er et heltal mellem 0 og 23minutes
ogseconds
er heltal mellem 0 og 59frac_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
ogseconds
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 afhours
,minutes
ellerseconds
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