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"