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 23minutesesecondssã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,minutesesecondssã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, ousecondsvalores.
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