- 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
- date (Data)
Argumento base para o calculo, sendo possível informar datas simples ou completas. (Com ou sem horas, minutos e segundos)¹. - interval (Intervalo)
Palavra chave da sintaxe. - 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². - 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.
selectdate_add(now(),interval1year)
2. Adicionando um mês sob a data atual
selectdate_add(now(),interval1month)
3. Adicionando um dia sob a data atual
selectdate_add(now(),interval1day)
4. Adicionando uma hora sob a data atual
selectdate_add(now(),interval1hour)
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.
selectdate_sub(now(),interval1year_month)
2. Subtraindo um mês sob a data atual
selectdate_sub(now(),interval1month)
3. Subtraindo um dia e uma hora sob a data atual
selectdate_sub(now(),interval1day_hour)
4. Subtraindo uma hora e um minuto sob a data atual
selectdate_sub(now(),interval1hour_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.

