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_formatis een SQL-intervalformaat dat compatibel is met de SQL-standaard (ISO/IEC 9075).ds_iso_formatis 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:
daysis een geheel getal tussen 0 en 999999999hoursis een geheel getal tussen 0 en 23minutesensecondszijn gehele getallen tussen 0 en 59frac_secsis 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,minutesensecondszijn gehele getallen tussen 0 en 999999999.frac_secsis 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, ofsecondswaarden.
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