Função MySQL TIMESTAMPDIFF()

 Resumo : neste tutorial, você aprenderá como usar a TIMESTAMPDIFF()função MySQL para calcular a diferença entre dois valores DATEou DATETIME.

Introdução à função MySQL TIMESTAMPDIFF()

A TIMESTAMPDIFF()função retorna a diferença entre duas expressões de data e hora em anos, meses, dias, horas, minutos ou segundos.

Aqui está a sintaxe da TIMESTAMPDIFFfunção:

TIMESTAMPDIFF(unit, begin, end);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • começar. Esta é uma expressão de data e hora
  • fim

A TIMESTAMPDIFFfunção retorna o resultado de begin - end, onde begine endsão DATEou DATETIMEexpressões.

A TIMESTAMPDIFFfunção permite que seus argumentos tenham tipos mistos, por exemplo, beginé um DATEvalor e endé um DATETIMEvalor. Caso você utilize um DATEvalor, a TIMESTAMPDIFFfunção o trata como um DATETIMEvalor cuja parte temporal é '00:00:00'.

O unitargumento determina a unidade do resultado (end - begin)representado como um número inteiro. As seguintes unidades são válidas:

  • MICROSSEGUNDO
  • SEGUNDO
  • MINUTO
  • HORA
  • DIA
  • SEMANA
  • MÊS
  • TRIMESTRE
  • ANO

Exemplos de funções MySQL TIMESTAMPDIFF()

Vejamos alguns exemplos de uso da TIMESTAMPDIFF()função.

1) Exemplos simples de funções TIMESTAMPDIFF()

O exemplo a seguir retorna uma diferença entre 2010-01-01e 2010-06-01 em meses:

SELECT 
  TIMESTAMPDIFF(
    MONTH, '2010-01-01', '2010-06-01'
  ) result;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------+
| result |
+--------+
|      5 |
+--------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Se quiser obter a diferença em dias, você precisa alterar o argumento da unidade de MONTHpara DAYda seguinte forma:

SELECT 
  TIMESTAMPDIFF(DAY, '2010-01-01', '2010-06-01') result;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------+
| result |
+--------+
|    151 |
+--------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

A instrução a seguir retorna uma diferença de dois DATETIMEvalores em minutos:

SELECT 
  TIMESTAMPDIFF(
    MINUTE, '2010-01-01 10:00:00', '2010-01-01 10:45:00'
  ) result;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------+
| result |
+--------+
|     45 |
+--------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Observe que TIMESTAMPDIFFconsidera apenas a parte do tempo que é relevante para o unitargumento. Por exemplo:

SELECT 
  TIMESTAMPDIFF(
    MINUTE, '2010-01-01 10:00:00', '2010-01-01 10:45:59'
  ) result;Linguagem de código:  JavaScript  ( javascript )

Saída:

+--------+
| result |
+--------+
|     45 |
+--------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A diferença deve ser de 45 minutos e 59 segundos. Porém, usamos o unitargumento como MINUTE, portanto, a função retorna apenas 45 minutos e ignora os 59 segundos.

Se você usar SECONDem vez de MINUTE, a TIMESTAMPDIFFfunção considerará a SECONDparte conforme mostrado no exemplo a seguir:

SELECT 
  TIMESTAMPDIFF(
    SECOND, '2010-01-01 10:00:00', '2010-01-01 10:45:59'
  ) result;Linguagem de código:  JavaScript  ( javascript )

Saída:

+--------+
| result |
+--------+
|   2759 |
+--------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

45 minutos 59 segundos = 45 x 60 + 59 (segundos) = 2759 segundos

2) Calculando idades usando a função TIMESTAMPDIFF()

Primeiro, crie uma nova tabela com o nome personsda demonstração.

CREATE TABLE persons (
    id INT AUTO_INCREMENT PRIMARY KEY,
    full_name VARCHAR(255) NOT NULL,
    date_of_birth DATE NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira algumas linhas na personstabela:

INSERT INTO persons(full_name, date_of_birth)
VALUES('John Doe', '1990-01-01'),
      ('David Taylor', '1989-06-06'),
      ('Peter Drucker', '1985-03-02'),
      ('Lily Smith', '1992-05-05'),
      ('Mary William', '1995-12-01');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, use TIMESTAMPDIFFpara calcular as idades de cada pessoa na   personstabela:

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        '2017-01-01') age
FROM
    persons;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

Função MySQL TIMESTAMPDIFF

Nesta afirmação, calculamos as idades em  January 1st 2017.

Se quiser calcular as idades atuais, você pode substituir o valor literal 2017-01-01pela NOW função da seguinte forma:

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        NOW()) age
FROM
    persons; Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use a TIMESTAMPDIFF()função para calcular a diferença entre dois valores DATEou DATETIME.

Deixe um comentário

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