No MariaDB,
SUBDATE()
é uma função interna de data e hora que subtrai um valor de uma determinada data. Ele permite que você altere uma data especificando a data, a unidade a ser subtraída e o valor a ser subtraído. Você pode passar um valor negativo para adicionar para a data, em vez de subtrair dela.
SUBDATE()
também possui uma sintaxe de atalho que permite especificar os dias a serem subtraídos. Sintaxe
O
SUBDATE()
função tem duas sintaxes. Sintaxe 1:
SUBDATE(expr,days)
Onde
expr
é a data e days
é o número de dias para subtrair. Sintaxe 2:
SUBDATE(date,INTERVAL expr unit)
Onde
date
é a data a ser alterada, expr
é o valor a ser subtraído e unit
é a unidade de data/hora a ser subtraída (por exemplo, segundo, minuto, etc). Ao usar esta sintaxe,
SUBDATE()
é um sinônimo para DATE_SUB()
. Exemplo – Sintaxe 1
Aqui está um exemplo de uso da primeira sintaxe:
SELECT SUBDATE('2021-05-01', 1);
Resultado:
+--------------------------+| SUBDATE('2021-05-01', 1) |+--------------------------+| 30/04/2021 |+--------------------------+
Também podemos incluir a parte do tempo, se necessário:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Resultado:
+-----------------------------------+| SUBDATE('2021-05-01 10:00:00', 1) |+------------------------------------------ ----+| 30/04/2021 10:00:00 |+-------------------------------------------------+
Aqui estão duas maneiras alternativas de fazer a mesma coisa:
SELECT DATE_SUB('2021-05-01 10:00:00', INTERVAL 1 DAY) AS "Result 1", '2021-05-01 10:00:00' - INTERVAL 1 DAY AS "Result 2";
Resultado:
+---------------------+----------+| Resultado 1 | Resultado 2 |+---------------------+---------------------+| 30/04/2021 10:00:00 | 30/04/2021 10:00:00 |+--------------------------------+---------------- -----+Exemplo – Sintaxe 2
Aqui está um exemplo de uso da segunda sintaxe:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Resultado:
+---------------------------------------------- ---+| SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR) |+----------------------------- --------------------+| 2021-05-31 09:00:00 |+------------------------------------------------- -----------+
Essa sintaxe nos permite subtrair outras unidades da data (ou seja, não apenas os dias). Aqui, subtraí uma hora da data, mas poderia facilmente ter subtraído minutos, segundos, meses, dias, anos, etc. Exemplos depois.
Aqui estão dois métodos alternativos para alcançar o mesmo resultado do exemplo acima:
SELECT DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR) AS "Result 1", '2021-05-31 10:00:00' - INTERVAL 1 HOUR AS "Result 2";
Resultado:
+---------------------+----------+| Resultado 1 | Resultado 2 |+---------------------+---------------------+| 2021-05-31 09:00:00 | 31/05/2021 09:00:00 |+--------------------------------+---------------- -----+Intervalos negativos
Fornecendo um intervalo negativo adiciona esse valor até a data.
Exemplo:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Resultado:
+---------------------------------------------- ----+| SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR) |+---------------------------- ------------+| 31/05/2021 11:00:00 |+------------------------------------------------- ------------+Outras Unidades
Aqui está um exemplo que subtrai um intervalo de 1 das várias unidades de data e hora:
SELECT SUBDATE('2021-05-01 10:00:00', INTERVAL 1 YEAR) AS YEAR, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MONTH) AS MONTH, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 DAY) AS DAY, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 HOUR) AS HOUR, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MINUTE) AS MINUTE, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 SECOND) AS SECOND, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND;
Resultado (usando saída vertical):
ANO:2020-05-01 10:00:00 MÊS:2021-04-01 10:00:00 DIA:2021-04-30 10:00:00 HORA:2021-05-01 09:00:00 MINUTO:2021-05-01 09:59:00 SEGUNDO:2021-05-01 09:59:59MICROSSEGUNDO:2021-05-01 09:59:59.999999Unidades Compostas
Aqui está um exemplo que usa unidades compostas:
SELECT SUBDATE('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH", SUBDATE('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND", SUBDATE('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";
Resultado:
+----------+---------------------+-- -------------------+| ANO_MÊS | HOUR_SECOND | DAY_MINUTE |+---------------------+---------------------+--- ------------------+| 01-03-2020 10:00:00 | 01-05-2021 08:34:25 | 2021-05-01 08:30:00 |+--------------------------------+---------------- -----+----------+Datas nulas
Passandonull
para a data retornanull
:
SELECT SUBDATE(null, INTERVAL 1 YEAR);
Resultado:
+--------------------------------+| SUBDATE(nulo, INTERVAL 1 ANO) |+--------------------------------+| NULL |+--------------------------------+Argumento ausente
ChamandoSUBDATE()
com o número errado de argumentos ou sem passar nenhum argumento resulta em um erro:
SELECT SUBDATE();
Resultado:
ERRO 1064 (42000):Você tem um erro na sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MariaDB para a sintaxe correta para usar perto de ')' na linha 1