Mysql
 sql >> Base de données >  >> RDS >> Mysql

SUBDATE() vs DATE_SUB() dans MySQL :Quelle est la différence ?

La différence entre MySQL SUBDATE() et DATE_SUB() fonctions est exactement la même que la différence entre ADDDATE() et DATE_ADD() les fonctions. Une fonction autorise deux formes de syntaxe différentes, tandis que l'autre n'en autorise qu'une seule.

Cet article montre la différence.

Syntaxe

Voici la syntaxe de chaque fonction.

DATE_SUB()

Le DATE_SUB() la syntaxe ressemble à ceci.

DATE_SUB(date,INTERVAL expr unit)

Ceci accepte une valeur de date, suivie de INTERVAL mot-clé et l'expression et l'unité pour lesquelles soustraire de la date fournie par le premier argument.

SUBDATE()

Le SUBDATE() La syntaxe permet deux formes. Vous pouvez utiliser l'un des formulaires suivants.

SUBDATE(date,INTERVAL expr unit)

Ou

SUBDATE(expr,days)

La première forme est exactement la même que le DATE_SUB() syntaxe, et lorsque vous utilisez cette syntaxe, le SUBDATE() la fonction est synonyme de DATE_SUB() .

Cependant, la deuxième forme de syntaxe n'est disponible que lors de l'utilisation de SUBDATE() fonction, et il vous permet d'utiliser un raccourci pour spécifier le nombre de jours à soustraire de la date.

Exemple

Voici un exemple d'utilisation des deux fonctions pour soustraire un certain nombre de jours à la même date.

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';

Résultat :

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

Cependant, si nous essayons d'utiliser la forme de syntaxe alternative avec DATE_SUB() nous obtenons une erreur.

SET @date = '2023-12-10';
SELECT DATE_SUB(@date, 5) AS 'DATE_SUB 2';

Résultat :

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

Et bien sûr, la raison de cette erreur est que DATE_SUB() ne prend pas en charge cette syntaxe.

Notez que cette deuxième forme de syntaxe ne peut être utilisée que pour soustraire jours à partir de la date. Si vous devez soustraire une autre unité (par exemple, des mois), vous devrez utiliser la première syntaxe.