I Oracle Database, TO_DSINTERVAL()
funktionen konverterar sitt argument till värdet INTERVAL DAY TO SECOND
datatyp.
Syntax
Syntaxen ser ut så här:
TO_DSINTERVAL ( ' { sql_format | ds_iso_format } '
[ DEFAULT return_value ON CONVERSION ERROR ] )
Så 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.
Syntaxen för sql_format
går så här:
[+ | -] days hours : minutes : seconds [. frac_secs ]
Var:
days
är ett heltal mellan 0 och 999999999hours
är ett heltal mellan 0 och 23minutes
ochseconds
är heltal mellan 0 och 59frac_secs
är bråkdelen av sekunder mellan .0 och .999999999.- En eller flera tomma fält skiljer dagar från timmar. Ytterligare tomrum är tillåtna mellan formatelement.
Och syntaxen för ds_iso_format
:
[-] P [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Var:
days
,hours
,minutes
ochseconds
är heltal mellan 0 och 999999999.frac_secs
är bråkdelen av sekunder mellan .0 och .999999999.- Inga blanksteg är tillåtna i värdet.
- Om du anger
T
, då måste du ange minst en avhours
,minutes
, ellerseconds
värden.
Exempel
Här är några exempel att visa.
SQL-format
Här skickar jag argumentet i SQL-format:
SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;
Resultat:
+135 08:35:47.123456789
Vi kan förse den med dess tecken om det behövs. Låt oss vända det till ett negativt:
SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;
Resultat:
-135 08:35:47.123456789
ISO-format
I det här exemplet skickar jag samma värde, men i ISO-format:
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;
Resultat:
+135 08:35:47.123456789
Här är det med ett negativt värde:
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;
Resultat:
-135 08:35:47.123456789
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 DAY TO SECOND
typ.
Exempel:
SELECT
TO_DSINTERVAL(
'Oops!'
DEFAULT '00 00:00:00' ON CONVERSION ERROR
)
FROM DUAL;
Resultat:
+00 00:00:00.000000
Nollargument
Skickar null
resulterar i null
:
SET NULL 'null';
SELECT
TO_DSINTERVAL(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_DSINTERVAL()
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT TO_DSINTERVAL() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Och att skicka för många argument resulterar i ett fel:
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT TO_DSINTERVAL('P135D', 'P135D') FROM DUAL Error report - ORA-12702: invalid NLS parameter string used in SQL function