Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função TO_DSINTERVAL() no Oracle


No banco de dados Oracle, o TO_DSINTERVAL() função converte seu argumento para um valor de INTERVAL DAY TO SECOND tipo de dados.

Sintaxe


A sintaxe fica assim:
TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] )

Então você tem a opção de passar o argumento no formato SQL ou no formato ISO.

Aqui está a diferença:
  • sql_format é o formato de intervalo SQL compatível com o padrão SQL (ISO/IEC 9075).
  • ds_iso_format é o formato de duração ISO compatível com o padrão ISO 8601:2004.

A sintaxe para sql_format fica assim:
[+ | -] days hours : minutes : seconds [. frac_secs ]

Onde:
  • days é um número inteiro entre 0 e 999999999
  • hours é um número inteiro entre 0 e 23
  • minutes e seconds são inteiros entre 0 e 59
  • frac_secs é a parte fracionária de segundos entre .0 e .999999999.
  • Um ou mais espaços em branco separam dias de horas. Espaços em branco adicionais são permitidos entre os elementos de formato.

E a sintaxe para ds_iso_format :
[-] P [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Onde:
  • days , hours , minutes e seconds são números inteiros entre 0 e 999999999.
  • frac_secs é a parte fracionária de segundos entre .0 e .999999999.
  • Nenhum espaço em branco é permitido no valor.
  • Se você especificar T , você deve especificar pelo menos uma das hours , minutes , ou seconds valores.

Exemplos


Aqui estão alguns exemplos para demonstrar.

Formato SQL


Aqui, passo o argumento no formato SQL:
SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;

Resultado:
+135 08:35:47.123456789

Podemos antecedê-lo com seu sinal, se necessário. Vamos inverter para um negativo:
SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;

Resultado:
-135 08:35:47.123456789

Formato ISO


Neste exemplo passo o mesmo valor, mas em formato ISO:
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;

Resultado:
+135 08:35:47.123456789

Aqui está com um valor negativo:
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;

Resultado:
-135 08:35:47.123456789

Forneça um valor padrão no erro de conversão


Você também tem a opção de fornecer um valor para retornar caso haja um erro ao converter o argumento em um INTERVAL DAY TO SECOND tipo.

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

Resultado:
+00 00:00:00.000000

Argumentos nulos


Passando null resulta em null :
SET NULL 'null';
SELECT 
    TO_DSINTERVAL(null)
FROM DUAL;

Resultado:
null

Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que null ocorre como resultado de um SQL SELECT demonstração.

No entanto, você pode usar SET NULL para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null deve ser devolvido.

Contagem de argumentos inválida


Chamar a função sem passar nenhum argumento resulta em um erro:
SELECT TO_DSINTERVAL()
FROM DUAL;

Resultado:
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 passar muitos argumentos resulta em um erro:
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;

Resultado:
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