MySQL ma funkcję PERIOD_DIFF() funkcja, która pozwala znaleźć różnicę między dwoma okresami. Kropki są podawane jako dwa oddzielne argumenty i powinny mieć format RRMM lub RRRRMM .
Składnia
Składnia wygląda tak:
PERIOD_DIFF(P1,P2)
Gdzie P1 to pierwsza kropka, a P2 jest drugi.
Zauważ, że chociaż ta funkcja wydaje się używać dat, argumenty okresu nie są w rzeczywistości wartościami dat.
Przykład 1 – Podstawowe użycie
Oto podstawowy przykład.
SELECT PERIOD_DIFF(199906, 199905);
Wynik:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Więc w tym przypadku jest 1 miesiąc różnicy między tymi dwoma okresami.
Przykład 2 – Wyniki negatywne
Oto, co się stanie, jeśli zamienimy te dwa okresy.
SELECT PERIOD_DIFF(199905, 199906);
Wynik:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Zgodnie z oczekiwaniami wynik jest wartością ujemną.
Przykład 3 – Dwucyfrowe lata
Możesz również użyć dwucyfrowych lat (tak, aby format to RRMM ). Oto przykład do zademonstrowania.
SELECT PERIOD_DIFF(9906, 9905);
Wynik:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Przykład 4 – Korzystanie z aktualnej daty
Oto przykład, który wyprowadza jeden z argumentów okresu od bieżącej daty. Ten okres jest następnie porównywany z okresem stałym.
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';
Wynik:
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
Przykład 5 – Przykład bazy danych
Oto przykład, który idzie o krok dalej w poprzednim przykładzie i porównuje bieżący okres z okresem uzyskanym na podstawie daty w bazie danych.
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;
Wynik:
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+