Como Somar Datas no MySQL

Abordaremos neste artigo as seguintes funções nativas do MySQL

  • date_add
    Recomendada para adicionar valores a uma data.
  • date_sub
    Recomendada para reduzir valores a uma data.

Sintaxe

DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)

Definições da Sintaxe

  1. date (Data)
    Argumento base para o calculo, sendo possível informar datas simples ou completas. (Com ou sem horas, minutos e segundos)¹.
  2. interval (Intervalo)
    Palavra chave da sintaxe.
  3. expr (Expressão)
    Argumento da expressão que será utilizada como intervalo da função, possui tipo de dados do tipo string, que pode começar com menos (-) nos casos de subtração².
  4. unit (Unidade)
    Argumento chave que indica qual unidade de “medida” será usado, anos, dias, meses, horas…

Exemplos (Adição)

1. Adicionando um ano sob a data atual.

 select date_add(now(), interval 1 year)  

2. Adicionando um mês sob a data atual

 select date_add(now(), interval 1 month)  

3. Adicionando um dia sob a data atual

 select date_add(now(), interval 1 day)  

4. Adicionando uma hora sob a data atual

 select date_add(now(), interval 1 hour)  

A lista de possibilidades aceitas pelo argumento unit é extensa, veja:

unit Valor Esperado expr Format
MICROSECOND Microssegundo
SECOND Segundo
MINUTE Minuto
HOUR Hora
DAY Dia
WEEK Semana
MONTH Mês
QUARTER Trimestre
YEAR Ano
SECOND_MICROSECOND Segundo e Microssegundo
MINUTE_MICROSECOND Minuto e Microssegundo
MINUTE_SECOND Minuto e Segundo
HOUR_MICROSECOND Hora e Microssegundo
HOUR_SECOND Hora e Segundo
HOUR_MINUTE Hora e Minuto
DAY_MICROSECOND Dia e Microssegundo
DAY_SECOND Dia e Segundo
DAY_MINUTE Dia e Minuto
DAY_HOUR Dia e Hora
YEAR_MONTH Ano e Mês

Nos exemplos apresentados nós somamos valores a uma data com o uso do now(), mas o curdate() também pode ser utilizado, bem você passar uma data fixa, neste, não se esqueça de colocar as aspas. Agora, se precisa subtrair valores, usamos a função date_sub, vejamos.
Exemplos (Subtração)

1. Subtraindo um ano e um mês sob a data atual.

 select date_sub(now(), interval 1 year_month)  

2. Subtraindo um mês sob a data atual

 select date_sub(now(), interval 1 month)  

3. Subtraindo um dia e uma hora sob a data atual

 select date_sub(now(), interval 1 day_hour)  

4. Subtraindo uma hora e um minuto sob a data atual

 select date_sub(now(), interval 1 hour_minute)  
 

Caso seja necessário verificar se a data calculada será um dia útil ou não, podemos contar com o apoio da função para verificar dia útil no MySQL.

Perguntas Frequentes

Posso somar uma data com “select data + tempo”?
Não recomendo, desta forma a especificação do tempo será em segundos, e o tipo de dados resultante será um double que certamente extrapolará o calendário, e você também precisará formatar para um formato amigável, pois o resultado é YYYYMMDDHHMMSS. O mesmo resultado é obtido em casos de subtração.

Existem outras funções semelhante ao date_add ou date_sub?
Sim, o addtime/subtime e o adddate/subdate. Nestes podemos encontrar variações na sintaxe.

Caso tenha ficado alguma dúvida, queira dar uma sugestão ou reclamar também (:d), poste noscomentários, terei o maior prazer em responder, um grande abraço.

¹ Ao se informar somente a hora, minuto e segundo serão adicionados ao resultado, todos sob valores zerados.

² Neste caso, recomendo o uso do date_sub.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


*