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

Función TO_YMINTERVAL() en Oracle

En Oracle Database, el TO_YMINTERVAL() La función convierte su argumento a un valor de INTERVAL MONTH TO YEAR tipo de datos.

Sintaxis

La sintaxis es así:

TO_YMINTERVAL
  ( '  { [+|-] years - months 
       | ym_iso_format 
       } '
    [ DEFAULT return_value ON CONVERSION ERROR ]
  )

Tiene la opción de pasar el argumento en formato SQL o formato ISO.

Aquí está la diferencia:

  • sql_format es un 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.

En formato SQL, years es un número entero entre 0 y 999999999, y months es un número entero entre 0 y 11. Se permiten espacios en blanco adicionales entre los elementos de formato.

En formato ISO (sintaxis a continuación), los años y meses son números enteros entre 0 y 999999999. Días, hours , minutes , seconds y frac_secs son enteros no negativos y se ignoran, si se especifican. 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.

La sintaxis para ds_iso_format va así:

[-] P [ years Y ] [months M] [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Ejemplos

Aquí hay algunos ejemplos para demostrar.

Formato SQL

Aquí, paso el argumento en formato SQL:

SELECT TO_YMINTERVAL('1-2')
FROM DUAL;

Resultado:

+01-02

En este caso, pasé un año y dos meses en formato SQL.

Podemos anteponerle su signo si es necesario. Pasemos a negativo:

SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;

Resultado:

-01-02

Formato ISO

En este ejemplo paso el mismo valor, pero en formato ISO:

SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;

Resultado:

+01-02

Aquí está con un valor negativo:

SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;

Resultado:

-01-02

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 en un INTERVAL MONTH TO YEAR tipo.

Ejemplo:

SELECT 
    TO_YMINTERVAL(
    '1y-02m'
    DEFAULT '00-00' ON CONVERSION ERROR
    )
FROM DUAL;

Resultado:

+00-00

Argumentos nulos

Pasando null da como resultado null :

SET NULL 'null';
SELECT 
    TO_YMINTERVAL(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_YMINTERVAL()
FROM DUAL;

Resultado:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function

Y pasar demasiados argumentos da como resultado un error:

SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;

Resultado:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"