Resumo : neste tutorial, você aprenderá como usar a TIMESTAMPDIFF()
função MySQL para calcular a diferença entre dois valores DATE
ou 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 TIMESTAMPDIFF
funçã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 TIMESTAMPDIFF
função retorna o resultado de begin - end
, onde begin
e end
são DATE
ou DATETIME
expressões.
A TIMESTAMPDIFF
função permite que seus argumentos tenham tipos mistos, por exemplo, begin
é um DATE
valor e end
é um DATETIME
valor. Caso você utilize um DATE
valor, a TIMESTAMPDIFF
função o trata como um DATETIME
valor cuja parte temporal é '00:00:00'
.
O unit
argumento 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-01
e 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 MONTH
para DAY
da 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 DATETIME
valores 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 TIMESTAMPDIFF
considera apenas a parte do tempo que é relevante para o unit
argumento. 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 unit
argumento como MINUTE
, portanto, a função retorna apenas 45 minutos e ignora os 59 segundos.
Se você usar SECOND
em vez de MINUTE
, a TIMESTAMPDIFF
função considerará a SECOND
parte 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 persons
da 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 persons
tabela:
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 TIMESTAMPDIFF
para calcular as idades de cada pessoa na persons
tabela:
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:
Nesta afirmação, calculamos as idades em January 1st 2017
.
Se quiser calcular as idades atuais, você pode substituir o valor literal 2017-01-01
pela 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 valoresDATE
ouDATETIME
.