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

ADDDATE() vs DATE_ADD() no MySQL:Qual é a diferença?


Ao usar o MySQL, temos a opção de usar o comando ADDDATE() e DATE_ADD() funções sempre que queremos adicionar um intervalo de tempo específico a uma determinada data. Ambas as funções fazem a mesma coisa, mas há uma diferença entre elas.

Este artigo demonstra a diferença entre ADDDATE() e DATE_ADD() em MySQL.


Sintaxe


A diferença entre essas duas funções está em sua sintaxe. Uma função permite dois formulários diferentes, enquanto a outra permite apenas um formulário.

DATE_ADD()


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

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

ADDDATE()


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

Ou
ADDDATE(expr,days)

O primeiro formulário é exatamente igual ao DATE_ADD() sintaxe. Na verdade, ao usar esta sintaxe, o ADDDATE() função é um sinônimo para DATE_ADD() .

No entanto, é a segunda forma da sintaxe que diferencia as duas funções. Este segundo formulário só está disponível ao usar o ADDDATE() e permite que você use uma forma abreviada para especificar o número de dias a serem adicionados à data.

Exemplo


Aqui está um exemplo para demonstrar a diferença entre as duas formas.
SET @date = '2020-10-01';
SELECT 
    DATE_ADD(@date, INTERVAL 2 DAY) AS 'DATE_ADD',
    ADDDATE(@date, INTERVAL 2 DAY) AS 'ADDDATE 1',
    ADDDATE(@date, 2) AS 'ADDDATE 2';

Resultado:
+------------+------------+------------+
| DATE_ADD   | ADDDATE 1  | ADDDATE 2  |
+------------+------------+------------+
| 2020-10-03 | 2020-10-03 | 2020-10-03 |
+------------+------------+------------+

Mas se tentarmos usar o segundo formulário em ADD_DATE() , obtemos um erro:
SET @date = '2020-10-01';
SELECT DATE_ADD(@date, 2) AS 'DATE_ADD 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 '2) AS 'DATE_ADD 2'' at line 1

Isso ocorre porque esta função não suporta essa sintaxe.