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

Comment SUBDATE() fonctionne dans MariaDB

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) 

expr est la date, et days est le nombre de jours à soustraire.

Syntaxe 2 :

SUBDATE(date,INTERVAL expr unit) 

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

Unité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 renvoie null :

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