Função MySQL DATE_SUB()

Resumo : neste tutorial você aprenderá como subtrair uma hora de uma data usando a DATE_SUB()função MySQL.

Introdução à função MySQL DATE_SUB()

A DATE_SUB()função subtrai um valor de tempo (ou um intervalo ) de um valor DATEou DATETIME.

Aqui está a sintaxe da DATE_SUB()função:

DATE_SUB(date,INTERVAL expr unit)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A DATE_SUB()função aceita dois argumentos:

  •  date: Esta é a data em que você deseja subtrair um valor.
  •  expr: Esta é uma string que determina um valor de intervalo que você deseja subtrair da data. The unité a unidade de intervalo que exprdeve ser interpretada, por exemplo, DAY, HOUR, etc.

A DATE_SUB()função retorna NULL se a data for NULL.

A instrução a seguir usa a  DATE_SUB()função para subtrair um dia de July-4th-2017:

SELECT DATE_SUB('2017-07-04',INTERVAL 1 DAY) result;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------------+
| result     |
+------------+
| 2017-07-03 |
+------------+
1 row in set (0.00 sec) Linguagem de código:  JavaScript  ( javascript )

Neste exemplo:

  • A data é 2017-07-04, que está no yyyy-mm-ddformato.
  • O INTERVAL 1 DAYé interpretado como intervalo de 1 dia.

A DATE_SUB()função retorna um valor de string que representa a dataJuly, 3rd 2017

Semelhante à DATE_ADD()função, o tipo de dados do valor de retorno da DATE_SUB()função pode ser:

  • um DATETIMEvalor se o primeiro argumento for a DATETIMEou o intervalo tiver elementos de tempo, como hora, minuto, segundo, etc.
  • uma string caso contrário.

Veja o exemplo a seguir:

SELECT DATE_SUB('2017-07-04',INTERVAL 3 HOUR) result;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------------------+
| result              |
+---------------------+
| 2017-07-03 21:00:00 |
+---------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Como o intervalo é de 3 horas, o resultado da DATE_SUBfunção é um DATETIMEvalor.

Intervalo negativo

O exprintervalo pode ser positivo ou negativo. Caso the exprseja negativo, a DATE_SUB()função se comporta como a DATE_ADD()função mostrada no exemplo a seguir:

SELECT DATE_SUB('2017-07-03',INTERVAL -1 DAY) result;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------------+
| result     |
+------------+
| 2017-07-04 |
+------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Data inválida ou incorreta

Se o primeiro argumento da DATE_SUB()função for uma data malformada e inválida ou NULL, a DATE_SUB()função retornará NULL.

SELECT DATE_SUB('2017-02-29', INTERVAL - 1 DAY) result;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set, 1 warning (0.00 sec)
Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, 2017-02-03é uma data inválida, portanto, o resultado é NULL. Além disso, o MySQL produziu um aviso.

SHOW WARNINGS;

Saída:

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2017-02-29' |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Os exemplos a seguir demonstram os efeitos ao passar uma data malformada ou  NULLpara a DATE_SUBfunção:

SELECT DATE_SUB('03/07/2017', INTERVAL 1 DAY) result;Linguagem de código:  JavaScript  ( javascript )

Saída:

+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set, 1 warning (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

SELECT DATE_SUB(NULL, INTERVAL 1 DAY) result;Linguagem de código:  PHP  ( php )

Saída:

+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

MySQL DATE_SUB: dia ajustado automaticamente

Se você subtrair MONTH, YEAR, ou YEAR_MONTHde uma data e a nova data tiver um dia muito grande para o novo mês, o DATE_SUB()dia será ajustado para o último dia do novo mês. Por exemplo:

SELECT DATE_SUB('2017-03-30', INTERVAL 1 MONTH) result;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------------+
| result     |
+------------+
| 2017-02-28 |
+------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, subtraímos 1 mês de March 30th 2017, portanto, o resultado é February 28th 2017.

Porém, a DATE_SUB()função ajustou o dia para 28 em vez de 30 porque February 2017tem apenas 28 dias.

Resumo

  • Use a função MySQL DATE_SUB()para subtrair um intervalo de um valor DATEou DATETIME.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *