In Oracle Database, de TO_DSINTERVAL()
functie converteert zijn argument naar een waarde van INTERVAL DAY TO SECOND
gegevenstype.
Syntaxis
De syntaxis gaat als volgt:
TO_DSINTERVAL ( ' { sql_format | ds_iso_format } '
[ DEFAULT return_value ON CONVERSION ERROR ] )
Je hebt dus de mogelijkheid om het argument door te geven in SQL-formaat of ISO-formaat.
Dit is het verschil:
sql_format
is een SQL-intervalformaat dat compatibel is met de SQL-standaard (ISO/IEC 9075).ds_iso_format
is ISO-duurformaat dat compatibel is met de ISO 8601:2004-standaard.
De syntaxis voor sql_format
gaat als volgt:
[+ | -] days hours : minutes : seconds [. frac_secs ]
Waar:
days
is een geheel getal tussen 0 en 999999999hours
is een geheel getal tussen 0 en 23minutes
enseconds
zijn gehele getallen tussen 0 en 59frac_secs
is het fractionele deel van seconden tussen .0 en .999999999.- Een of meer lege plekken scheiden dagen van uren. Extra spaties zijn toegestaan tussen formaatelementen.
En de syntaxis voor ds_iso_format
:
[-] P [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Waar:
days
,hours
,minutes
enseconds
zijn gehele getallen tussen 0 en 999999999.frac_secs
is het fractionele deel van seconden tussen .0 en .999999999.- Er zijn geen spaties toegestaan in de waarde.
- Als je
T
. opgeeft , dan moet u ten minste één van dehours
. opgeven ,minutes
, ofseconds
waarden.
Voorbeelden
Hier zijn enkele voorbeelden om te demonstreren.
SQL-indeling
Hier geef ik het argument door in SQL-formaat:
SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;
Resultaat:
+135 08:35:47.123456789
We kunnen er indien nodig een teken aan toevoegen. Laten we het omdraaien naar een negatief:
SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;
Resultaat:
-135 08:35:47.123456789
ISO-formaat
In dit voorbeeld geef ik dezelfde waarde door, maar in ISO-formaat:
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;
Resultaat:
+135 08:35:47.123456789
Hier is het met een negatieve waarde:
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;
Resultaat:
-135 08:35:47.123456789
Geef een standaardwaarde op bij conversiefout
Je hebt ook de mogelijkheid om een waarde op te geven die moet worden geretourneerd in het geval dat er een fout optreedt tijdens het converteren van het argument naar een INTERVAL DAY TO SECOND
typ.
Voorbeeld:
SELECT
TO_DSINTERVAL(
'Oops!'
DEFAULT '00 00:00:00' ON CONVERSION ERROR
)
FROM DUAL;
Resultaat:
+00 00:00:00.000000
Nullargumenten
Doorgeven van null
resulteert in null
:
SET NULL 'null';
SELECT
TO_DSINTERVAL(null)
FROM DUAL;
Resultaat:
null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Ongeldig aantal argumenten
Het aanroepen van de functie zonder argumenten door te geven, resulteert in een fout:
SELECT TO_DSINTERVAL()
FROM DUAL;
Resultaat:
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:
En het doorgeven van te veel argumenten resulteert in een fout:
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;
Resultaat:
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