Oracle
 sql >> Baza danych >  >> RDS >> Oracle

TO_DSINTERVAL() Funkcja w Oracle

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 999999999
  • hours jest liczbą całkowitą od 0 do 23
  • minutes i seconds są liczbami całkowitymi od 0 do 59
  • frac_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 i seconds 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ą z hours , minutes lub seconds 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dzielenie ciągu na wiele wierszy w Oracle

  2. Zapytanie SQL do przetłumaczenia listy liczb dopasowanych z kilku zakresów na listę wartości

  3. Co to jest dokładnie BLOB w kontekście DBMS

  4. wyrocznia - jakie oświadczenia należy popełnić?

  5. Znak ucieczki pl-sql Oracle (dla ' )