Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SUBDATE() vs DATE_SUB() no MySQL:Qual é a diferença?


A diferença entre o MySQL SUBDATE() e DATE_SUB() funções é exatamente igual à diferença entre as funções ADDDATE() e DATE_ADD() funções. Uma função permite duas formas de sintaxe diferentes, enquanto a outra permite apenas uma.

Este artigo demonstra a diferença.


Sintaxe


Aqui está a sintaxe para cada função.

DATE_SUB()


O DATE_SUB() sintaxe fica assim.
DATE_SUB(date,INTERVAL expr unit)

Isso aceita um valor de data, seguido pelo INTERVAL palavra-chave e a expressão e unidade para a qual subtrair da data fornecida pelo primeiro argumento.

SUBDATE()


O SUBDATE() sintaxe permite duas formas. Você pode usar um dos seguintes formulários.
SUBDATE(date,INTERVAL expr unit)

Ou
SUBDATE(expr,days)

O primeiro formulário é exatamente igual ao DATE_SUB() sintaxe, e quando você usa esta sintaxe, o SUBDATE() função é sinônimo de DATE_SUB() .

No entanto, o segundo formulário de sintaxe só está disponível ao usar o SUBDATE() e permite que você use uma forma abreviada para especificar o número de dias a serem subtraídos da data.

Exemplo


Aqui está um exemplo de uso de ambas as funções para subtrair um certo número de dias da mesma data.
SET @date = '2023-12-10';
SELECT 
    DATE_SUB(@date, INTERVAL 5 DAY) AS 'DATE_SUB',
    SUBDATE(@date, INTERVAL 5 DAY) AS 'SUBDATE 1',
    SUBDATE(@date, 5) AS 'SUBDATE 2';

Resultado:
+------------+------------+------------+
| DATE_SUB   | SUBDATE 1  | SUBDATE 2  |
+------------+------------+------------+
| 2023-12-05 | 2023-12-05 | 2023-12-05 |
+------------+------------+------------+

No entanto, se tentarmos usar a forma de sintaxe alternativa com DATE_SUB() obtemos um erro.
SET @date = '2023-12-10';
SELECT DATE_SUB(@date, 5) AS 'DATE_SUB 2';

Resultado:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5) AS 'DATE_SUB 2'' at line 1

E, claro, o motivo desse erro é porque DATE_SUB() não suporta essa sintaxe.

Observe que este segundo formulário de sintaxe só pode ser usado para subtrair dias a partir da data. Se você precisar subtrair qualquer outra unidade (por exemplo, meses), precisará usar a primeira sintaxe.