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 | +----------------+---------------------+----------------+------------+