- 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.
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.