Skip to content

Archives

  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021

Categories

  • No hay categorías
Trend RepositoryArticles and guides
Articles

Database.Guide

On enero 27, 2022 by admin

Este artículo analiza la diferencia entre dos funciones de MySQL; DATEDIFF() y TIMESTAMPDIFF().

Ambas funciones devuelven la diferencia entre dos fechas y/o horas, pero el resultado es diferente entre las dos funciones.

La siguiente tabla resume la diferencia entre estas dos funciones:

DATEDIFF() TIMESTAMPDIFF()
Requiere 2 argumentos. Requiere 3 argumentos.
Resta el 2º argumento del 1º (expr1 – expr2). Resta el 2º argumento del 3º (expr2 – expr1).
El resultado se expresa como un valor en días. El resultado se expresa como la unidad proporcionada por el primer argumento.
Puede comparar sólo el valor de la fecha de sus argumentos. Puede comparar el valor de la fecha y la hora de sus argumentos.
  • Ejemplo 1 – Operación básica
  • Ejemplo 2 – Cambiar la unidad
  • Ejemplo 3 – Precisión
  • Ejemplo 4 – Tipos de argumento erróneos
  • Ejemplo 5 – Tipos de argumentos mixtos

Ejemplo 1 – Operación básica

Aquí hay un ejemplo que demuestra cómo funcionan estas funciones, y cómo los resultados son diferentes, incluso cuando se utiliza la misma unidad.

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'TIMESTAMPDIFF';

Resultado:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Así que ambas funciones devuelven la diferencia en días, sin embargo un resultado es positivo y el otro negativo. Esto se debe a que DATEDIFF() resta la segunda fecha de la primera, mientras que TIMESTAMPDIFF() resta la primera fecha de la segunda.

Ejemplo 2 – Cambiar la unidad

Como demuestra el ejemplo anterior, el TIMESTAMPDIFF() permite especificar una unidad para que los resultados sean devueltos como (de hecho, requiere que se especifique la unidad). Por otro lado, DATEDIFF() no permite especificar una unidad. Sólo devuelve el resultado en días.

Así que podríamos modificar el ejemplo anterior para que TIMESTAMPDIFF() devuelva el número de horas en lugar de días:

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(hour, @date1, @date2) AS 'TIMESTAMPDIFF';

Resultado:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -24 |+----------+---------------+

Puede llegar hasta los microsegundos:

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'TIMESTAMPDIFF';

Resultado:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -86400000000 |+----------+---------------+

Ejemplo 3 – Precisión

La precisión de DATEDIFF() es de un día, y TIMESTAMPDIFF() puede llegar hasta el microsegundo. Sin embargo, la precisión de TIMESTAMPDIFF() (y la unidad que compara) sigue dependiendo de la unidad especificada.

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-10 23:59:59';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Resultado:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| 0 | 0 | 23 | 1439 | 86399 | 86399000000 |+----------+------+-------+---------+---------+--------------+

Y este es el resultado si incrementamos la 2ª fecha en un segundo (lo que la lleva al día siguiente):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-11 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Resultado:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| -1 | 1 | 24 | 1440 | 86400 | 86400000000 |+----------+------+-------+---------+---------+--------------+

Aquí tenemos otro ejemplo, esta vez viendo cómo queda cuando devolvemos meses, trimestres y años cuando la diferencia es de un mes (o 31 días):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-11-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(month, @date1, @date2) AS 'Month', TIMESTAMPDIFF(quarter, @date1, @date2) AS 'Quarter', TIMESTAMPDIFF(year, @date1, @date2) AS 'Year';

Resultado:

+----------+------+-------+---------+------+| DATEDIFF | Days | Month | Quarter | Year |+----------+------+-------+---------+------+| -31 | 31 | 1 | 0 | 0 |+----------+------+-------+---------+------+

Ejemplo 4 – Tipos de argumento erróneos

Ambas funciones devuelven null si se les pasa el tipo de argumento equivocado.

SET @time1 = '12:15:35', @time2 = '00:00:00';SELECT DATEDIFF(@time1, @time2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @time1, @time2) AS 'TIMESTAMPDIFF';

Resultado:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| NULL | NULL |+----------+---------------+

Ejemplo 5 – Tipos de argumentos mixtos

Ambas funciones permiten proporcionar una fecha como un argumento y un datetime como otro argumento.

SET @thedate = '2010-10-11', @thedatetime = '2010-10-10 00:00:00';SELECT DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF', TIMESTAMPDIFF(day, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';

Resultado:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Archivos

  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021

Meta

  • Acceder
  • Feed de entradas
  • Feed de comentarios
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress