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:
- YEAR: retorna a quantidade de anos completos;
- MONTH: retorna a quantidade de meses completos;
- DAY: retorna a quantidade de dias completos;
- HOUR: retorna a quantidade de horas completas;
- MINUTE: retorna a quantidade de minutos completos;
- SECOND: retorna a quantidade de segundos completos;
- QUARTER: retorna a quantidade de trimestres completos;
1º ExemploCená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:
- imovel_id: número de identificação do imóvel;
- data_oferta: data de início da oferta do imóvel;
- data_locacao: a data em que o imóvel foi alugado;
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:
SELECTimovel_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_diasFROM 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:
SELECTimovel_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_diaFROM 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º ExemploCená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:
- cliente_id: número de identificação do cliente;
- data_cadastro: data de cadastro do cliente;
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.
SELECTcliente_id,data_cadastro,/*calcula a diferença em dias completos*/DATEDIFF(CURDATE(), data_cadastro) AS quantidade_diasFROM 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çõesSe você colocar a data inicial antes da data final, como está exibido abaixo, a diferença será negativa.
DATEDIFF(data_inicial, data_final)
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 segundosFROM 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