Utilizando a função DATE_SUB() para cálculo de datas no MySQL

datas_mysqlOlá pessoal, hoje vamos falar sobre instruções SQL no MySQL, mas pretendo iniciar uma série de artigos sobre consultas avançadas. Instruções que aparentemente não tem importância e nem utilidade até aparecer um cliente com uma necessidade maluca e podem ter certeza, isso vai acontecer!!!
Costumo frequentar o fórum da DevMedia, inclusive sou moderador das salas MySQL, Firebird e PHP, sempre estou respondendo a dúvidas interessantes e as vezes necessidades estranhas, mas isso acaba aguçando meus conhecimentos principalmente em MySQL e PHP. 
 
Hoje vou demonstrar uma maneira interessante de pesquisar intervalo entre datas, fugindo do uso habitual do sinal de maior ‘>’ e ‘<‘ menor. Vamos trabalhar com a função do MySQL DATE_SUB().
 
DATE_SUB(date, INTERVAL expr unit): Essa função tem como objetivo subtrair um determinado valor da data passada como parâmetro. Esse valor a ser subtraído pode ser em dias (DAY), meses (MONTH), anos (YEAR) e etc., sempre informando ‘INTERVAL’.
O parâmetro unit informa qual parte da hora ou data será subtraída, abaixo segue uma tabela com os tipos aceitos pelo MySQL:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Exemplo prático, abaixo estou subtraindo 10 dias da data atual:

 
 
 
 
Agora será subtraído 10 meses da data atual:
 
 
 
 
 
 
 
 
 
 
Para finalizar esses exemplos, vamos subtrair 10 anos da data atual:
 
 
 
 
 
 
 
 
 
 
 
Agora que já foi passado o funcionamento básico dessa função pode surgir a pergunta:
 “Mas onde eu vou usar isso?”
 
Existem situações onde é necessário listar registros de uma certa quantidade de dias, meses ou anos anteriores ou posteriores a uma determinada data, cálculos complexos envolvendo datas e até projeções de datas uma vez que essa função retorna meses com 30 ou 31 dias e anos bissextos. E ainda podemos montar condições WHERE complexas com esse tipo de função.
 
Bom pessoal até a próxima …
Post relacionado:  (Parte 1) Importando planilhas do Excel para o MySQL usando PHP com PDO
Tags:
Show Buttons
Hide Buttons