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 DATE
ou 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. Theunit
é a unidade de intervalo queexpr
deve 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á noyyyy-mm-dd
formato. - 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
DATETIME
valor se o primeiro argumento for aDATETIME
ou 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_SUB
função é um DATETIME
valor.
Intervalo negativo
O expr
intervalo pode ser positivo ou negativo. Caso the expr
seja 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 NULL
para a DATE_SUB
funçã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_MONTH
de 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 2017
tem apenas 28 dias.
Resumo
- Use a função MySQL
DATE_SUB()
para subtrair um intervalo de um valorDATE
ouDATETIME
.