Función escalar INTERVAL
La función INTERVAL convierte una representación de serie de caracteres de un intervalo a una duración decimal.
El esquema es SYSIBM.
Sintaxis
- constante-serie
- Una representación de serie de caracteres de un intervalo, por ejemplo:
'4 años 2 meses 3 días' '3 día 4 año 2 mes' '-4a -2 m -3d' '-2 hr -21 min -34seg' '4años 2meses 3 días 2 horas 21minutos 34segundos 75 milisegundos 27 microsegundos' '2 mes 3 días 4 años 2 hrs 20 mins 30 segs 75 ms 27 us'Nota:- La entrada debe ser una constante de tipo serie, no una expresión ni un valor de columna (sqlcode SQL0171N con SQLSTATE=42815).
- Es opcional un espacio en blanco entre cada valor y su palabra clave de unidad.
- Los valores deben ser todos positivos o todos negativos.
- Las palabras clave de unidad no distinguen entre mayúsculas y minúsculas.
- El orden de las palabras clave de unidad no es importante.
- Una palabra clave de unidad no se puede utilizar más de una vez.
- El número especificado para cada unidad debe ser un número entero.
- Las sentencias siguientes son equivalentes:
INTERVAL (constante-serie) CAST (constante-serie as INTERVAL)
El intervalo especificado puede adoptar uno de los tipos siguientes:- intervalo de tiempo
- El valor de entrada no contiene unidades distintas a horas, minutos o segundos y no puede exceder el equivalente de
'99h 99m 99s'(sqlcode SQL0105N con SQLSTATE=42604). Un valor de minutos que excede 99 se convierte a horas, y un valor de segundos que excede 99 se convierte a minutos. Por ejemplo, 100 segundos se convierte a 1 minuto y 40 segundos. - intervalo de fecha
- El valor de entrada no contiene unidades distintas a años, meses o días y no puede exceder el equivalente de
'9999y 99m 99d'(sqlcode SQL0105N con SQLSTATE=42604). Un valor de meses que excede 99 se convierte a años, y un valor de días que excede 99 se convierte a meses de 30 días. Por ejemplo, 100 días se convierten a 3 meses y 10 días. - intervalo de indicación de fecha y hora
- El valor de entrada no puede exceder el equivalente de
'9999y 99m 99d 99h 99m 99s 999999us'(sqlcode SQL0105N con SQLSTATE=42604). Los valores de milisegundo y microsegundo se combinan en un único valor de microsegundo antes de que se evalúen. Si el valor resultante excede 999999 microsegundos, se convierte a segundos. Por ejemplo,'88 ms 5000000 us'se convierte a 5088000 microsegundos. Esto excede 999999 microsegundos, así que se convierte a 5,088000 segundos. Un valor de segundos que excede 99 se convierte a minutos. Un valor de minutos que excede 99 se convierte a horas. Un valor de horas que excede 99 se convierte a días. Un valor de días que excede 99 se convierte a meses de 30 días. Un valor de mes que excede 99 se convierte a años.
| Palabras clave | Valor máximo permitido al especificar un... | ||
|---|---|---|---|
| intervalo de tiempo | intervalo de fecha | intervalo de indicación de fecha y hora | |
| año, años, añs, añ, a | (no permitido) | 9999 | 9999 |
| mes, meses, mese, mes | (no permitido) | 119999 | 119999 |
| día, días, d | (no permitido) | 3599999 | 3599999 |
| hora, horas, hrs, hr, h | 99 | (no permitido) | 86399999 |
| minuto, minutos, mins, min, m | 5999 | (no permitido) | 2147483647 |
| segundo, segundos, segs, seg, s | 359999 | (no permitido) | 2147483647 |
| milisegundo, milisegundos, ms | (no permitido) | (no permitido) | 2147483647 |
| microsegundo, microsegundos, us | (no permitido) | (no permitido) | 2147483647 |
Resultado
El tipo de datos del resultado depende del tipo del intervalo de entrada. Si el valor de entrada representa:
- Un intervalo de fecha, el resultado es una duración de fecha, que es un valor DECIMAL(8,0).
- Un intervalo de tiempo, el resultado es una duración de fecha, que es un valor DECIMAL(6,0).
- Un intervalo de indicación de fecha y hora, el resultado es una duración de indicación de fecha y hora, que es un valor DECIMAL. La precisión de este valor depende de si, después de combinar valores de milisegundo y microsegundo en un único valor de microsegundo, y después de convertir cualquier microsegundo en exceso de 999999 a segundos, el número de microsegundos restantes es cero:
- En ese caso, el resultado es DECIMAL(14,0)
- En caso contrario, el resultado es DECIMAL(20,6)
Ejemplos
- La sentencia siguiente devuelve el valor DECIMAL(8,0) 40203:
interval('4años 2meses 3días') - La sentencia siguiente devuelve el valor DECIMAL(6,0) -122030:
interval('-12 horas -20 minutos -30 segundos') - La sentencia siguiente devuelve el valor DECIMAL(20,6) 40801092630.007055:
interval('4 años 9 hora 26min 30 segundos 7 ms 55us 8meses 1d') - La sentencia siguiente devuelve el valor DECIMAL(14,0) 22035:
Los valores de milisegundo (1500) y microsegundo (3500000) se combinan en un único valor de microsegundo (5000000) antes de que se evalúen. El valor resultante excede 999999 microsegundos, así que se convierte a 5 segundos, que se añaden a los 30 segundos especificados para llegar a un total de 35 segundos.interval('2 horas 20 minutos 30 segundos 1500 ms 3500000 us') - La sentencia siguiente devuelve el valor DECIMAL(8,0) 90714, que corresponde a 9 años, 7 meses y 14 días.
Puesto que el número de días excede 99, los 104 días se convierten a 3 meses de 30 días, más un resto de 14 días. Los 3 meses se añaden a los 100 meses especificados para un total de 103 meses. Puesto que el número de meses excede 99, los 103 meses se convierten a 8 años de 12 meses, más un resto de 7 meses. Los 8 años se añaden al año especificado para llegar a un total de 9 años.interval('1 años 100 meses 104 días') - La sentencia siguiente devuelve el valor DECIMAL(6,0) 230120, que corresponde a 23 horas, 1 minuto y 20 segundos.
Puesto que el número de minutos excede 99, los 181 minutos se convierten a 3 horas de 60 minutos, más un resto de 1 minuto. Las 3 horas se añaden a las 20 horas especificadas para un total de 23 horas.interval('20 horas 181 minutos 20 segundos')
