MySQL има PERIOD_DIFF()
функция, която ви позволява да намерите разликата между два периода. Периодите се предоставят като два отделни аргумента и трябва да са във формат ГГММ или ГГГГММ .
Синтаксис
Синтаксисът е така:
PERIOD_DIFF(P1,P2)
Където P1
е първият период и P2
е вторият.
Имайте предвид, че въпреки че изглежда, че тази функция използва дати, аргументите на периода всъщност не са стойности за дата.
Пример 1 – Основна употреба
Ето един основен пример.
SELECT PERIOD_DIFF(199906, 199905);
Резултат:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Така че в този случай има 1 месец разлика между двата периода.
Пример 2 – Отрицателни резултати
Ето какво се случва, ако разменим тези два периода.
SELECT PERIOD_DIFF(199905, 199906);
Резултат:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Както се очаква, резултатът е отрицателна стойност.
Пример 3 – Двуцифрени години
Можете също да използвате двуцифрени години (така че форматът да е ГГММ ). Ето пример за демонстрация.
SELECT PERIOD_DIFF(9906, 9905);
Резултат:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Пример 4 – Използване на текущата дата
Ето пример, който извлича един от аргументите за периода от текущата дата. След това този период се сравнява с фиксиран период.
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';
Резултат:
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
Пример 5 – Пример за база данни
Ето пример, който отвежда предишния пример една стъпка напред и сравнява текущия период с период, получен от дата в база данни.
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;
Резултат:
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+