MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como SUBDATE() funciona no MariaDB


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

Unidades 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


Passando null para a data retorna null :
SELECT SUBDATE(null, INTERVAL 1 YEAR); 

Resultado:
+--------------------------------+| SUBDATE(nulo, INTERVAL 1 ANO) |+--------------------------------+| NULL |+--------------------------------+

Argumento ausente


Chamando SUBDATE() 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