W bazie danych Oracle TO_DSINTERVAL()
funkcja konwertuje swój argument na wartość INTERVAL DAY TO SECOND
typ danych.
Składnia
Składnia wygląda tak:
TO_DSINTERVAL ( ' { sql_format | ds_iso_format } '
[ DEFAULT return_value ON CONVERSION ERROR ] )
Masz więc możliwość przekazania argumentu w formacie SQL lub formacie ISO.
Oto różnica:
sql_format
to format interwału SQL zgodny ze standardem SQL (ISO/IEC 9075).ds_iso_format
to format czasu trwania ISO zgodny ze standardem ISO 8601:2004.
Składnia sql_format
idzie tak:
[+ | -] days hours : minutes : seconds [. frac_secs ]
Gdzie:
days
jest liczbą całkowitą od 0 do 999999999hours
jest liczbą całkowitą od 0 do 23minutes
iseconds
są liczbami całkowitymi od 0 do 59frac_secs
to ułamkowa część sekund między .0 a .999999999.- Jedno lub więcej pustych pól oddziela dni od godzin. Dodatkowe spacje są dozwolone między elementami formatu.
Oraz składnia ds_iso_format
:
[-] P [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Gdzie:
days
,hours
,minutes
iseconds
są liczbami całkowitymi od 0 do 999999999.frac_secs
to ułamkowa część sekund między .0 a .999999999.- W wartości nie są dozwolone żadne spacje.
- Jeśli określisz
T
, musisz określić co najmniej jedną zhours
,minutes
lubseconds
wartości.
Przykłady
Oto kilka przykładów do zademonstrowania.
Format SQL
Tutaj przekazuję argument w formacie SQL:
SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;
Wynik:
+135 08:35:47.123456789
W razie potrzeby możemy go poprzedzić jego znakiem. Odwróćmy to na negatyw:
SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;
Wynik:
-135 08:35:47.123456789
Format ISO
W tym przykładzie przekazuję tę samą wartość, ale w formacie ISO:
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;
Wynik:
+135 08:35:47.123456789
Tutaj jest z wartością ujemną:
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;
Wynik:
-135 08:35:47.123456789
Podaj wartość domyślną w przypadku błędu konwersji
Masz również możliwość podania wartości, która ma zostać zwrócona w przypadku wystąpienia błędu podczas konwertowania argumentu na INTERVAL DAY TO SECOND
typ.
Przykład:
SELECT
TO_DSINTERVAL(
'Oops!'
DEFAULT '00 00:00:00' ON CONVERSION ERROR
)
FROM DUAL;
Wynik:
+00 00:00:00.000000
Argumenty zerowe
Przekazywanie null
wyniki w null
:
SET NULL 'null';
SELECT
TO_DSINTERVAL(null)
FROM DUAL;
Wynik:
null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie funkcji bez przekazywania żadnych argumentów powoduje błąd:
SELECT TO_DSINTERVAL()
FROM DUAL;
Wynik:
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:
A przekazanie zbyt wielu argumentów skutkuje błędem:
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;
Wynik:
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