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 23minutesochsecondsä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,minutesochsecondsä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, ellersecondsvä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