Oracle
 sql >> Database >  >> RDS >> Oracle

TO_DSINTERVAL() Funzione in Oracle

In Oracle Database, il TO_DSINTERVAL() La funzione converte il suo argomento in un valore di INTERVAL DAY TO SECOND tipo di dati.

Sintassi

La sintassi è questa:

TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] )

Quindi hai la possibilità di passare l'argomento in formato SQL o ISO.

Ecco la differenza:

  • sql_format è un formato di intervallo SQL compatibile con lo standard SQL (ISO/IEC 9075).
  • ds_iso_format è un formato di durata ISO compatibile con lo standard ISO 8601:2004.

La sintassi per sql_format va così:

[+ | -] days hours : minutes : seconds [. frac_secs ]

Dove:

  • days è un numero intero compreso tra 0 e 999999999
  • hours è un numero intero compreso tra 0 e 23
  • minutes e seconds sono numeri interi compresi tra 0 e 59
  • frac_secs è la parte frazionaria di secondi compresa tra .0 e .999999999.
  • Uno o più spazi vuoti separano i giorni dalle ore. Sono consentiti spazi aggiuntivi tra gli elementi del formato.

E la sintassi per ds_iso_format :

[-] P [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Dove:

  • days , hours , minutes e seconds sono numeri interi compresi tra 0 e 999999999.
  • frac_secs è la parte frazionaria di secondi compresa tra .0 e .999999999.
  • Nessun valore è consentito.
  • Se specifichi T , devi specificare almeno uno degli hours , minutes o seconds valori.

Esempi

Ecco alcuni esempi da dimostrare.

Formato SQL

Qui passo l'argomento in formato SQL:

SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;

Risultato:

+135 08:35:47.123456789

Possiamo anteporre il suo segno se necessario. Capovolgiamolo in negativo:

SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;

Risultato:

-135 08:35:47.123456789

Formato ISO

In questo esempio passo lo stesso valore, ma in formato ISO:

SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;

Risultato:

+135 08:35:47.123456789

Eccolo con un valore negativo:

SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;

Risultato:

-135 08:35:47.123456789

Fornire un valore predefinito in caso di errore di conversione

Hai anche la possibilità di fornire un valore da restituire nel caso in cui si verifichi un errore durante la conversione dell'argomento in un INTERVAL DAY TO SECOND digitare.

Esempio:

SELECT 
    TO_DSINTERVAL(
    'Oops!'
    DEFAULT '00 00:00:00' ON CONVERSION ERROR
    )
FROM DUAL;

Risultato:

+00 00:00:00.000000

Argomenti nulli

Passaggio null risulta null :

SET NULL 'null';
SELECT 
    TO_DSINTERVAL(null)
FROM DUAL;

Risultato:

null

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Conteggio argomenti non valido

Chiamando la funzione senza passare alcun argomento, viene visualizzato un errore:

SELECT TO_DSINTERVAL()
FROM DUAL;

Risultato:

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:

E il passaggio di troppi argomenti genera un errore:

SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;

Risultato:

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