MySQL har en PERIOD_DIFF()
funktion som gör att du kan hitta skillnaden mellan två perioder. Perioderna tillhandahålls som två separata argument och de ska ha formatet ÅÅMM eller ÅÅÅÅMM .
Syntax
Syntaxen ser ut så här:
PERIOD_DIFF(P1,P2)
Där P1
är den första perioden och P2
är den andra.
Observera att även om den här funktionen verkar använda datum, är periodargumenten faktiskt inte datumvärden.
Exempel 1 – Grundläggande användning
Här är ett grundläggande exempel.
SELECT PERIOD_DIFF(199906, 199905);
Resultat:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Så i det här fallet är det 1 månads skillnad mellan de två perioderna.
Exempel 2 – Negativa resultat
Det här är vad som händer om vi byter om de två perioderna.
SELECT PERIOD_DIFF(199905, 199906);
Resultat:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Som väntat är resultatet ett negativt värde.
Exempel 3 – Tvåsiffriga år
Du kan också använda tvåsiffriga årtal (så att formatet är ÅÅMM). ). Här är ett exempel att visa.
SELECT PERIOD_DIFF(9906, 9905);
Resultat:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Exempel 4 – Använda det aktuella datumet
Här är ett exempel som härleder ett av periodargumenten från det aktuella datumet. Den perioden jämförs sedan med en fast period.
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 | +--------------+----------------+-----------------+------------+
Exempel 5 – Ett databasexempel
Här är ett exempel som tar det föregående exemplet ett steg längre och jämför den aktuella perioden med en period som härleds från ett datum i en databas.
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 | +----------------+---------------------+----------------+------------+