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 999999999hours
é um número inteiro entre 0 e 23minutes
eseconds
são inteiros entre 0 e 59frac_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
eseconds
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 dashours
,minutes
, ouseconds
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