Dans MariaDB, SUBDATE()
est une fonction de date et d'heure intégrée qui soustrait un montant d'une date donnée.
Il vous permet de modifier une date en spécifiant la date, l'unité à soustraire et le montant à soustraire. Vous pouvez passer un montant négatif afin d'ajouter à la date, au lieu de la soustraire.
SUBDATE()
a également une syntaxe de raccourci qui vous permet de spécifier les jours à soustraire.
Syntaxe
Le SUBDATE()
la fonction a deux syntaxes.
Syntaxe 1 :
SUBDATE(expr,days)
Où expr
est la date, et days
est le nombre de jours à soustraire.
Syntaxe 2 :
SUBDATE(date,INTERVAL expr unit)
Où date
est la date à modifier, expr
est le montant à soustraire, et unit
est l'unité de date/heure à soustraire (par exemple seconde, minute, etc.).
Lors de l'utilisation de cette syntaxe, SUBDATE()
est un synonyme de DATE_SUB()
.
Exemple - Syntaxe 1
Voici un exemple d'utilisation de la première syntaxe :
SELECT SUBDATE('2021-05-01', 1);
Résultat :
+-----------------------------------+| SOUSDATE('2021-05-01', 1) |+--------------------------+| 2021-04-30 |+--------------------------+
Nous pouvons également inclure la partie horaire si nécessaire :
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Résultat :
+-----------------------------------+| SOUS-DATE('2021-05-01 10:00:00', 1) |+------------------------------- ----+| 2021-04-30 10:00:00 |+-----------------------------------+Voici deux manières alternatives de faire la même chose :
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";
Résultat :
+---------------------+---------------------+| Résultat 1 | Résultat 2 |+---------------------+---------------------+| 2021-04-30 10:00:00 | 2021-04-30 10:00:00 |+---------------------+---------------- -----+Exemple - Syntaxe 2
Voici un exemple d'utilisation de la deuxième syntaxe :
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Résultat :
+------------------------------------------------------------ ---+| SOUS-DATE('2021-05-31 10:00:00', INTERVALLE 1 HEURE) |+------------------------- --------------------+| 2021-05-31 09:00:00 |+-------------------------------------------------- -----------+Cette syntaxe nous permet de soustraire d'autres unités de la date (c'est-à-dire pas seulement les jours). Ici, j'ai soustrait une heure à la date, mais j'aurais tout aussi bien pu soustraire des minutes, des secondes, des mois, des jours, des années, etc. Exemples plus tard.
Voici deux méthodes alternatives pour obtenir le même résultat que dans l'exemple ci-dessus :
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";
Résultat :
+---------------------+---------------------+| Résultat 1 | Résultat 2 |+---------------------+---------------------+| 2021-05-31 09:00:00 | 2021-05-31 09:00:00 |+---------------------+---------------- -----+Intervalles négatifs
Fournir un intervalle négatif ajoute ce montant à la date.
Exemple :
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Résultat :
+------------------------------------------------------------ ----+| SOUSDATE('2021-05-31 10:00:00', INTERVALLE -1 HEURE) |+---------------------------- ----------------------+| 2021-05-31 11:00:00 |+-------------------------------------------------- ------------+Autres unités
Voici un exemple qui soustrait un intervalle de 1 aux différentes unités de date et d'heure :
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;
Résultat (en utilisant la sortie verticale) :
ANNEE :01-05-2020 10:00:00 MOIS :01-04-2021 10:00:00 JOUR :30-04-2021 10:00:00 HEURE :01-05-2021 09:00 :00 MINUTE :01-05-2021 09:59:00 SECONDE :01-05-2021 09:59:59MICROSECOND :01-05-2021 09:59:59.999999Unités composites
Voici un exemple qui utilise des unités composées :
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";
Résultat :
+---------------------+---------------------+-- -------------------+| ANNEE_MOIS | HOUR_SECOND | JOUR_MINUTE |+---------------------+---------------------+--- ------------------+| 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 |+---------------------+---------------- -----+---------------------+Dates nulles
Passer
null
pour la date renvoienull
:SELECT SUBDATE(null, INTERVAL 1 YEAR);
Résultat :
+---------------------------------------------+| SUBDATE(null, INTERVALLE 1 AN) |+--------------------------------+| NULL |+--------------------------------+Argument manquant
Appel de
SUBDATE()
avec le mauvais nombre d'arguments, ou sans passage d'arguments, une erreur se produit :SELECT SUBDATE();
Résultat :
ERROR 1064 (42000) :vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de ')' à la ligne 1