MySQL har en PERIOD_DIFF()
funktion, der giver dig mulighed for at finde forskellen mellem to perioder. Perioderne er angivet som to separate argumenter, og de skal have formatet ÅÅMM eller ÅÅÅÅMM .
Syntaks
Syntaksen ser sådan ud:
PERIOD_DIFF(P1,P2)
Hvor P1
er den første periode, og P2
er den anden.
Bemærk, at selvom denne funktion ser ud til at bruge datoer, er periodeargumenterne faktisk ikke datoværdier.
Eksempel 1 – Grundlæggende brug
Her er et grundlæggende eksempel.
SELECT PERIOD_DIFF(199906, 199905);
Resultat:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Så i dette tilfælde er der 1 måneds forskel mellem de to perioder.
Eksempel 2 – Negative resultater
Her er, hvad der sker, hvis vi bytter om på de to perioder.
SELECT PERIOD_DIFF(199905, 199906);
Resultat:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Som forventet er resultatet en negativ værdi.
Eksempel 3 – To cifrede år
Du kan også bruge tocifrede årstal (så formatet er ÅÅMM). ). Her er et eksempel til at demonstrere.
SELECT PERIOD_DIFF(9906, 9905);
Resultat:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Eksempel 4 – Brug af den aktuelle dato
Her er et eksempel, der udleder et af periodeargumenterne fra den aktuelle dato. Den periode sammenlignes så med en fast periode.
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';
Resultat:
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
Eksempel 5 – Et databaseeksempel
Her er et eksempel, der tager det forrige eksempel et skridt videre og sammenligner den aktuelle periode med en periode afledt af en dato i en database.
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;
Resultat:
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+