TIMESTAMPDIFF función escalar

La función TIMESTAMPDIFF devuelve un número estimado de intervalos del tipo definido por el primer argumento, basado en la diferencia entre dos indicaciones de fecha y hora.

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualTIMESTAMPDIFF( expresión-numérica, string-expression)

El esquema es SYSIBM.

expresión-numérica
Expresión que devuelve un valor que es un tipo de datos SMALLINT o INTEGER integrado. El valor especifica el intervalo que se utiliza para determinar la diferencia entre dos marcas de tiempo. La siguiente tabla enumera los valores válidos para la expresión numérica :
Tabla 1. Valores válidos para la expresión numérica e intervalos equivalentes que se utilizan para determinar la diferencia entre dos marcas de tiempo
Valores válidos para la expresión numérica intervalos equivalentes
1 Microsegundos
2 Segundos
4 Minutos
8 Horas
16 Días
32 Semanas
64 Meses
128 Trimestres
256 Años
expresión-serie

Expresión que devuelve un valor de una cadena de caracteres incorporada o un tipo de datos de cadena gráfica que no es un LOB. Se espera que el valor sea el resultado de restar dos marcas de tiempo y convertir el resultado en una cadena de caracteres de longitud 22. El valor de la serie no debe tener más de 6 dígitos a la derecha de la coma decimal.

Si el argumento suministrado es una cadena gráfica, se convierte primero en una cadena de caracteres antes de ejecutar la función.
La siguiente tabla describe los elementos de la expresión de cadena :
Tabla 2. Elementos de serie TIMESTAMPDIFF
Elementos de serie Valores válidos Posición del carácter desde la coma decimal (negativo a la izquierda)
Años 1-9998 o en blanco De -14 a -11
Meses 0-11 o en blanco De -10 a -9
Días 0-30 o en blanco De -8 a -7
Horas 0-24 o en blanco De -6 a -5
Minutos 0-59 o en blanco De -4 a -3
Segundos 0-59 De -2 a -1
Separador de decimales punto 0
Microsegundo 000000-999999 De 1 a 6

El resultado de la función es un número entero con el mismo signo que el segundo argumento.

El resultado puede ser nulo; si cualquier argumento es nulo, el resultado es el valor nulo.

El valor que se devuelve se determina para cada intervalo, según lo indicado en la tabla siguiente:

Tabla 3. Cálculos de TIMESTAMPDIFF
Intervalo resultante Cálculo mediante elementos de duración
Años años
Trimestres valor entero de (meses+(años*12))/3
Meses meses + (años*12)
Semanas valor entero de ((días+(meses*30))/7)+(años*52)
Días días + (meses*30)+(años*365)
Horas horas+ ((días + ( months*30 ))+( years*365 ))*24)
Minutos (el valor absoluto de la duración no debe superar 40850913020759.999999) minutos + (horas+((días+( months*30 )+( years*365 ))*24))*60
Segundos (el valor absoluto de la duración debe ser inferior a 680105031408.000000)
segundos + (minutos + (horas + ((días + ( months*30 )
+ ( years*365 ))*24))*60) *60
Microsegundos (el valor absoluto de la duración debe ser inferior a 3547.483648) microsegundos + (segundos+(minutos*60))*1000000

Las siguientes suposiciones se utilizan para estimar una diferencia:

  • Un año tiene 365 días
  • Un año tiene 52 semanas
  • Un año tiene 12 meses
  • Un mes tiene 30 días
  • Un día tiene 24 horas
  • Una hora tiene 60 minutos
  • Un minuto tiene 60 segundos

El uso de estas suposiciones implica que algunos valores de resultados son una estimación del intervalo. Consulte los ejemplos siguientes:

  • Diferencia de 1 mes cuando el mes tiene menos de 30 días.
    TIMESTAMPDIFF(16, CHAR(TIMESTAMP('1997-03-01-00.00.00') 
    		- TIMESTAMP('1997-02-01-00.00.00')))

    El resultado de la aritmética de la marca de tiempo es una duración de 00000100000000.000000, o 1 mes. Cuando se invoca la función TIMESTAMPDIFF con 16 para el argumento de intervalo (días), se aplica la suposición de 30 días en un mes y el resultado es 30.

  • Diferencia de 1 día menos de 1 mes cuando el mes tiene menos de 30 días.
    TIMESTAMPDIFF(16, CHAR(TIMESTAMP('1997-03-01-00.00.00') 
    		- TIMESTAMP('1997-02-02-00.00.00')))

    El resultado de la aritmética de la marca de tiempo es una duración de 00000027000000.000000, o 27 días. Cuando se invoca la función TIMESTAMPDIFF con 16 para el argumento de intervalo (días), el resultado es 27.

  • Diferencia de 1 día menos de 1 mes cuando el mes tiene 31 días.
    TIMESTAMPDIFF(64, CHAR(TIMESTAMP('1997-09-01-00.00.00') 
    		- TIMESTAMP('1997-08-02-00.00.00')))

    El resultado de la aritmética de la marca de tiempo es una duración de 00000030000000.000000, o 30 días. Cuando se invoca la función TIMESTAMPDIFF con 64 para el argumento de intervalo (meses), el resultado es 0. La parte de días de la duración es 30, pero se ignora porque el intervalo especificado es meses.

Ejemplo : La siguiente sentencia estima la edad de los empleados en meses y devuelve ese valor como AGE_IN_MONTHS:
SELECT
  TIMESTAMPDIFF(64, CAST(CURRENT_TIMESTAMP-CAST(BIRTHDATE AS TIMESTAMP)
                AS CHAR(22)))
    AS AGE_IN_MONTHS
  FROM EMPLOYEE;