sql >> Base de Datos >  >> RDS >> Oracle

Función TO_DSINTERVAL() en Oracle

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 999999999
  • hours es un número entero entre 0 y 23
  • minutes y seconds son números enteros entre 0 y 59
  • frac_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 y seconds 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 las hours , minutes , o seconds 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