Skip to content

Archives

  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021
  • Outubro 2021
  • Setembro 2021

Categories

  • Sem categorias
Trend RepositoryArticles and guides
Articles

Base de dados.Guide

On Janeiro 27, 2022 by admin

Este artigo analisa a diferença entre duas funções MySQL; DATEDIFF() e TIMESTAMPDIFF().

Algumas funções retornam a diferença entre duas datas e/ou horas, mas o resultado é diferente entre as duas funções.

A tabela seguinte resume a diferença entre estas duas funções:

DATEDIFF() TIMESTAMPDIFF()
Requer 2 argumentos. Requer 3 argumentos.
Subtrai o 2º argumento do 1º (expr1 – expr2). Subtrai o 2º argumento do 3º (expr2 – expr1).
Resultado é expresso como um valor em dias. Resultado é expresso como a unidade fornecida pelo primeiro argumento.
Pode comparar apenas o valor da data dos seus argumentos. Pode comparar o valor da data e hora dos seus argumentos.
  • Exemplo 1 – Operação Básica
  • Exemplo 2 – Mudando a Unidade
  • Exemplo 3 – Precisão
  • Exemplo 4 – Tipos de Argumento Errados
  • Exemplo 5 – Tipos de Argumentos Mistos

Exemplo 1 – Operação Básica

Aqui está um exemplo que demonstra como estas funções funcionam, e como os resultados são diferentes, mesmo quando se usa a mesma unidade.

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 |+----------+---------------+

Então ambas as funções retornam a diferença em dias, porém um resultado é positivo e o outro negativo. Isto porque DATEDIFF() subtrai a segunda data da primeira, enquanto TIMESTAMPDIFF() subtrai a primeira data da segunda.

Exemplo 2 – Mudando a Unidade

Como o exemplo anterior demonstra, o TIMESTAMPDIFF() permite especificar uma unidade para os resultados a serem retornados como (de fato, requer que você especifique a unidade). Por outro lado, DATEDIFF() não permite que você especifique uma unidade. Ele só retorna o resultado em dias.

Então poderíamos modificar o exemplo anterior para que TIMESTAMPDIFF() devolva o número de horas em vez de dias:

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 |+----------+---------------+

Pode ir até aos microssegundos:

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 |+----------+---------------+

Exemplo 3 – Precisão

A precisão de DATEDIFF() é de um dia, e TIMESTAMPDIFF() pode descer até ao microssegundo. No entanto a precisão de TIMESTAMPDIFF() (e a unidade que compara) ainda depende da unidade 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 |+----------+------+-------+---------+---------+--------------+

E aqui está o resultado se incrementarmos a 2ª data em um segundo (o que a leva ao dia seguinte):

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 |+----------+------+-------+---------+---------+--------------+

Aqui está outro exemplo, desta vez vendo como fica quando retornamos meses, trimestres e anos quando a diferença é de um mês (ou 31 dias):

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 |+----------+------+-------+---------+------+

Exemplo 4 – Tipos de Argumento Errados

Todas as funções retornam nulas se forem passadas o tipo de argumento errado.

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 |+----------+---------------+

Exemplo 5 – Tipos de Argumentos Mistos

As duas funções permitem fornecer uma data como um argumento e uma data/hora como outro 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 |+----------+---------------+

Deixe uma resposta Cancelar resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Arquivo

  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021
  • Outubro 2021
  • Setembro 2021

Meta

  • Iniciar sessão
  • Feed de entradas
  • Feed de comentários
  • 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