En Oracle Database, el TO_DSINTERVAL()
La función convierte su argumento a un valor de INTERVAL DAY TO SECOND
tipo de datos.
Sintaxis
La sintaxis es así:
TO_DSINTERVAL ( ' { sql_format | ds_iso_format } '
[ DEFAULT return_value ON CONVERSION ERROR ] )
Entonces tiene la opción de pasar el argumento en formato SQL o formato ISO.
Aquí está la diferencia:
sql_format
es el formato de intervalo SQL compatible con el estándar SQL (ISO/IEC 9075).ds_iso_format
es el formato de duración ISO compatible con el estándar ISO 8601:2004.
La sintaxis para sql_format
va así:
[+ | -] days hours : minutes : seconds [. frac_secs ]
Dónde:
days
es un número entero entre 0 y 999999999hours
es un número entero entre 0 y 23minutes
yseconds
son números enteros entre 0 y 59frac_secs
es la parte fraccionaria de segundos entre .0 y .999999999.- Uno o más espacios en blanco separan los días de las horas. Se permiten espacios en blanco adicionales entre los elementos de formato.
Y la sintaxis para ds_iso_format
:
[-] P [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
donde:
days
,hours
,minutes
yseconds
son números enteros entre 0 y 999999999.frac_secs
es la parte fraccionaria de segundos entre .0 y .999999999.- No se permiten espacios en blanco en el valor.
- Si especifica
T
, entonces debe especificar al menos una de lashours
,minutes
, oseconds
valores.
Ejemplos
Aquí hay algunos ejemplos para demostrar.
Formato SQL
Aquí, paso el argumento en formato SQL:
SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;
Resultado:
+135 08:35:47.123456789
Podemos anteponerle su signo si es necesario. Pasemos a negativo:
SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;
Resultado:
-135 08:35:47.123456789
Formato ISO
En este ejemplo paso el mismo valor, pero en formato ISO:
SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;
Resultado:
+135 08:35:47.123456789
Aquí está con un valor negativo:
SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;
Resultado:
-135 08:35:47.123456789
Proporcionar un valor predeterminado en caso de error de conversión
También tiene la opción de proporcionar un valor para devolver en caso de que haya un error al convertir el argumento a un INTERVAL DAY TO SECOND
tipo.
Ejemplo:
SELECT
TO_DSINTERVAL(
'Oops!'
DEFAULT '00 00:00:00' ON CONVERSION ERROR
)
FROM DUAL;
Resultado:
+00 00:00:00.000000
Argumentos nulos
Pasando null
da como resultado null
:
SET NULL 'null';
SELECT
TO_DSINTERVAL(null)
FROM DUAL;
Resultado:
null
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null
ocurre como resultado de un SQL SELECT
declaración.
Sin embargo, puede usar SET NULL
para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null
debe ser devuelto.
Recuento de argumentos no válidos
Llamar a la función sin pasar ningún argumento da como resultado un error:
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:
Y pasar demasiados argumentos da como resultado un error:
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