MySQL ma funkcję PERIOD_ADD()
funkcja pozwalająca na dodanie liczby miesięcy do danego okresu. Zwraca wartość w formacie RRRRMM .
Ten artykuł zawiera przykłady pokazujące, jak to działa.
Składnia
Składnia wygląda tak:
PERIOD_ADD(P,N)
Gdzie P
jest kropką, a N
to liczba miesięcy do dodania.
Zauważ, że chociaż ta funkcja wydaje się dodawać miesiące do daty, argument okresu nie jest w rzeczywistości wartością daty.
Przykład 1 – Podstawowe użycie
Oto podstawowy przykład.
SELECT PERIOD_ADD(202101,2);
Wynik:
+----------------------+ | PERIOD_ADD(202101,2) | +----------------------+ | 202103 | +----------------------+
Więc w tym przypadku dodaliśmy dwa miesiące do okresu.
Przykład 2 – Wartości ujemne
Oto przykład, który dodaje ujemną liczbę miesięcy.
SELECT PERIOD_ADD(202101,-2);
Wynik:
+-----------------------+ | PERIOD_ADD(202101,-2) | +-----------------------+ | 202011 | +-----------------------+
Przykład 3 – Dwucyfrowe lata
W tym przykładzie zastosowano dwucyfrowy składnik roku.
SELECT PERIOD_ADD(2101,2);
Wynik:
+--------------------+ | PERIOD_ADD(2101,2) | +--------------------+ | 202103 | +--------------------+
Zauważysz, że wynik nadal używa roku czterocyfrowego (mimo że podaliśmy argument okresu jako rok dwucyfrowy).
Przykład 4 – Korzystanie z aktualnej daty
W tym przykładzie okres pochodzi z bieżącej daty. Następnie dodaje miesiąc do tego okresu.
SELECT CURDATE( ) AS 'Current Date', EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', PERIOD_ADD(EXTRACT(YEAR_MONTH FROM CURDATE( )), 1) AS 'Next Period';
Wynik:
+--------------+----------------+-------------+ | Current Date | Current Period | Next Period | +--------------+----------------+-------------+ | 2018-06-30 | 201806 | 201807 | +--------------+----------------+-------------+
Przykład 5 – Przykład bazy danych
Oto przykład, który przeszukuje bazę danych.
USE sakila; SELECT payment_date AS 'Payment Date', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Payment Period', PERIOD_ADD(EXTRACT(YEAR_MONTH FROM payment_date), 12) AS 'Next Payment' FROM payment WHERE payment_id = 1;
Wynik:
+---------------------+----------------+--------------+ | Payment Date | Payment Period | Next Payment | +---------------------+----------------+--------------+ | 2005-05-25 11:30:37 | 200505 | 200605 | +---------------------+----------------+--------------+