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

Leer el esquema de sintaxisOmitir el esquema de sintaxis visual INTERVAL ( constante-serie )
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.
Tabla 1. Palabras clave para representar unidades de tiempo
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:
    interval('2 horas 20 minutos 30 segundos 1500 ms 3500000 us')
    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.
  • La sentencia siguiente devuelve el valor DECIMAL(8,0) 90714, que corresponde a 9 años, 7 meses y 14 días.
    interval('1 años 100 meses 104 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.
  • La sentencia siguiente devuelve el valor DECIMAL(6,0) 230120, que corresponde a 23 horas, 1 minuto y 20 segundos.
    interval('20 horas 181 minutos 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.