MySQL a un PERIOD_DIFF()
fonction qui permet de trouver la différence entre deux périodes. Les points sont fournis sous la forme de deux arguments distincts et doivent être au format AAMM ou AAAAMM .
Syntaxe
La syntaxe ressemble à ceci :
PERIOD_DIFF(P1,P2)
Où P1
est la première période, et P2
est le deuxième.
Notez que bien que cette fonction semble utiliser des dates, les arguments de période ne sont pas réellement des valeurs de date.
Exemple 1 - Utilisation de base
Voici un exemple de base.
SELECT PERIOD_DIFF(199906, 199905);
Résultat :
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Donc dans ce cas, il y a 1 mois d'écart entre les deux périodes.
Exemple 2 – Résultats négatifs
Voici ce qui se passe si nous échangeons ces deux périodes.
SELECT PERIOD_DIFF(199905, 199906);
Résultat :
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Comme prévu, le résultat est une valeur négative.
Exemple 3 – Années à deux chiffres
Vous pouvez également utiliser des années à deux chiffres (pour que le format soit AAMM ). Voici un exemple pour illustrer.
SELECT PERIOD_DIFF(9906, 9905);
Résultat :
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Exemple 4 - Utilisation de la date actuelle
Voici un exemple qui dérive l'un des arguments de la période à partir de la date actuelle. Cette période est ensuite comparée à une période fixe.
SELECT CURDATE( ) AS 'Current Date', EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', 199901 AS 'Previous Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM CURDATE( )), 199901) AS 'Difference';
Résultat :
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
Exemple 5 - Un exemple de base de données
Voici un exemple qui pousse l'exemple précédent un peu plus loin et compare la période actuelle avec une période dérivée d'une date dans une base de données.
USE sakila; SELECT EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', payment_date AS 'Payment Date', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Payment Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM payment_date), EXTRACT(YEAR_MONTH FROM CURDATE( ))) AS 'Difference' FROM payment WHERE payment_id = 1;
Résultat :
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+