Mysql - diferença entre datas
Tecnologia da Informação

Mysql - diferença entre datas


Neste post vamos apresentar 4 exemplos de como calcular a diferença entre datas.

Para calcular a diferença entre duas datas, em dias, utilizamos a função "DATEDIFF". Esta função é utilizada no 1º e 2º exemplos.

DATEDIFF (data_final, data_inicial)

Também podemos utilizar a função "TIMESTAMPDIFF" para calcular a diferença entre datas. Esta função é utilizada no 3º e 4º exemplos.

TIMESTAMPDIFF (unidade, data_inicial, data_final)

A unidade pode ser:

1º Exemplo

Cenário: em uma imobiliária, um funcionário precisa fazer um levantamento de quantos dias são necessários para alugar os imóveis. Para fazer este cálculo vamos utilizar a tabela "tb_locacao". Esta tabela possui três colunas:

Veja a imagem da tabela "tb_locacao":



Solução: temos que calcular a diferença entre as colunas "data_locação" e "data_oferta".

Para calcularmos a diferença em dias executamos a sentença abaixo:

SELECT
imovel_id,
data_oferta,
data_locacao,
/*Calculo da diferença entre a data da locação e a data de oferta*/
DATEDIFF (data_locacao, data_oferta)AS quantidade_dias
FROM tb_locacao;

Após executarmos a sentença acima, teremos o resultado exibido na tabela abaixo:


Observação: caso seja necessário, incluir o primeiro dia, na contagem dos dias, utilize a sentença a seguir:

SELECT
imovel_id,
data_oferta,
data_locacao,
DATEDIFF (data_locacao, data_oferta) AS quantidade_dias,
/*Calculo da diferença entre a data da locação e a data de oferta, levando em consideração o primeiro dia*/
DATEDIFF (data_locacao, SUBDATE(data_oferta, 1)) AS quantidade_dias_primeiro_dia
FROM tb_locacao;

Após executarmos a sentença acima, teremos o resultado exibido na tabela a seguir:




Perceba que quando subtraímos datas o primeiro dia não é considerado, se precisarmos considerar o 1º dia devemos descontar um dia data inicial utilizando a função "SUBDATE".  
Neste exemplo, a data inicial é representada pela coluna "data_oferta":

2º Exemplo

Cenário: uma loja virtual vai oferecer uma oferta especial, aos clientes que estão cadastrados a mais de 90 dias no seu site. Para fazer este cálculo vamos utilizar a tabela "tb_cadastro". Esta tabela possui duas colunas:

Veja a imagem da tabela "tb_cadastro":


Solução: temos que calcular a diferença entre o dia atual (hoje) e a coluna data_cadastro.
Antes de efetuarmos o cálculo devemos saber como retornar o dia atual.
Para retorna o dia atual utilizamos a função:

CURRENT_DATE

OU

CURDATE()

Para exibirmos o dia atual execute a sentença abaixo (quando executei esta sentença o dia era 13/11/2013):

SELECT CURRENT_DATE;

OU

SELECT CURDATE()


Agora que já conhecemos a função que calcula o dia atual (hoje), vamos executar a sentença para verificar os clientes que estão cadastrados a mais de 90 dias.

SELECT
cliente_id,
data_cadastro,
/*calcula a diferença em dias completos*/
DATEDIFF(CURDATE(), data_cadastro) AS quantidade_dias
FROM tb_cadastro
/*filtra somente os clientes que são cadastrados há mais que 90 dias*/
WHERE DATEDIFF(CURDATE(), data_cadastro) > 90;

Após executarmos a sentença acima, filtramos os clientes que estão cadastrados a mais de 90 dias. Veja a imagem na tabela abaixo:

Observações
Se você colocar a data inicial antes da data final, como está exibido abaixo, a diferença será negativa.

DATEDIFF(data_inicial, data_final)

3º Exemplo

Cenário: uma fábrica quer calcular o periodo de utilização da seus equipamentos, em anos. Para fazer este cálculo vamos utilizar a tabela "tb_equipamento". Esta tabela possui duas colunas:
  • equipamento_id: número de identificação do equipamento;
  • data_inicio: data de inicio da utilização do equipamento;
  • data_encerramento: data de encerramento da utilização do equipamento;
Veja a imagem da tabela "tb_equipamento":


Solução: temos que calcular a diferença entre a coluna data_encerramento e a coluna data_inicio.

SELECT
equipamento_id,
data_inicio,
data_encerramento,
/*calcula a diferença em anos completos*/
TIMESTAMPDIFF(YEAR , data_inicio, data_encerramento) AS periodo_anos
FROM tb_equipamento;




4º Exemplo

Cenário: vamos calcular o período dos equipamentos mas agora em anos, meses, dias, horas, minutos e segundos.
Veja a imagem da tabela "tb_equipamento":


Para calcularmos o período, executamos a sentença abaixo:

SELECT 
data_inicio,
data_encerramento,
/**
 *Calcular a diferença em anos.
 */
TIMESTAMPDIFF(YEAR, data_inicio, data_encerramento) AS anos ,
/**
 *Calcular a diferença em meses.
 *Não vão ser contados os meses que já entraram na contagem dos anos completos.  
 */
TIMESTAMPDIFF
(
MONTH, 
data_inicio + INTERVAL TIMESTAMPDIFF(YEAR,  data_inicio, data_encerramento) YEAR , 
data_encerramento
) AS meses,
/**
 *Calcular a diferença em dias.
 *Não vão ser contados os dias que já entraram na contagem dos meses completos.  
 */
TIMESTAMPDIFF
(
DAY
data_inicio + INTERVAL TIMESTAMPDIFF(MONTH, data_inicio, data_encerramento) MONTH
data_encerramento
) AS dias ,
/**
 *Calcular a diferença em horas.
 *Não vão ser contadas as horas que já entraram na contagem dos dias completos.  
 */
TIMESTAMPDIFF
(
HOUR
data_inicio + INTERVAL TIMESTAMPDIFF(DAY,  data_inicio, data_encerramento) DAY
data_encerramento
) AS horas,
/**
 *Calcular a diferença em minutos.
 *Não vão ser contados os minutos que já entraram na contagem das horas completas.  
 */
TIMESTAMPDIFF
(
MINUTE
data_inicio + INTERVAL TIMESTAMPDIFF(HOUR,  data_inicio, data_encerramento) HOUR
data_encerramento
) AS minutos,
/**
 *Calcular a diferença em segundos.
 *Não vão ser contados os segundo que já entraram na contagem dos minutos completos.  
 */
TIMESTAMPDIFF
(
SECOND
data_inicio + INTERVAL TIMESTAMPDIFF(MINUTE,  data_inicio, data_encerramento) MINUTE, 
data_encerramento
) AS segundos
FROM tb_equipamento;

Após a execução da sentença temos o resultado a seguir:










Em breve postarei mais exemplos de função com data.



loading...

- Diferença Entre Horas
Trabalhar com datas é sempre chato. Pesquisando como calcular a diferença entre duas horas achei esse site/blog http://juliocesarmartini.com/blog/arquivos/calcular-diferenca-entre-dois-horarios-mysql/ Estou fazendo uma boa ação em php+mysql, e preciso...

- Postgresql - Função Lag - Diferença De Tempo Para Uma Mesma Coluna
Vamos apresentar 4 exemplos de como calcular a diferença de período para uma mesma coluna. Para isto vamos utilizar a função LAG do PostgreSql. Está função pertence ao grupo das Window Functions e funciona a partir do PostgreSQL 8.4.22 Caso tenha...

- Subtrair Intervalo De Uma Data
Vamos mostrar neste artigo, como subtrair um período de uma data. Descrevemos 3 exemplos: 1º exemplo: mostra como subtrair um período de dias de uma data. São descritas duas soluções para resolver este problema. A primeira utiliza a subtração...

- Postgresql - Adicionar Um Intervalo A Uma Data / Hora
Vamos mostrar neste artigo, como acrescentar um período a uma data. Descrevemos 5 exemplos: Caso tenha interesse, faça o download do exemplo, ou veja no GitHub. 1º exemplo: mostra como acrescentar um período em dias a uma data. São descritas duas...

- Postgresql - Extrair Parte De Uma Data Com Extract
A função extract extrai parte de uma data ou intervalo. Ela é equivalente a função date_part. Vamos descrever 3 exemplos com a função extract. Caso tenha interesse faça download dos exemplos ou veja no GitHub. 1º Exemplo: vamos extrair partes...



Tecnologia da Informação








.