PERIOD_ADD() Examples – MySQL

MySQL has a PERIOD_ADD() function that allows you to add a number of months to a given period. It returns a value in the format YYYYMM.

This article provides examples to demonstrate how it works.

Syntax

The syntax goes like this:

PERIOD_ADD(P,N)

Where P is the period, and N is the number of months to add.

Note that, although this function appears to be adding months to a date, the period argument is not actually a date value.

Example 1 – Basic Usage

Here’s a basic example.

SELECT PERIOD_ADD(202101,2);

Result:

+----------------------+
| PERIOD_ADD(202101,2) |
+----------------------+
|               202103 |
+----------------------+

So in this case, we added two months to the period.

Example 2 – Negative Values

Here’s an example that adds a negative number of months.

SELECT PERIOD_ADD(202101,-2);

Result:

+-----------------------+
| PERIOD_ADD(202101,-2) |
+-----------------------+
|                202011 |
+-----------------------+

Example 3 – Two Digit Years

This example uses a two digit year component.

SELECT PERIOD_ADD(2101,2);

Result:

+--------------------+
| PERIOD_ADD(2101,2) |
+--------------------+
|             202103 |
+--------------------+

You’ll notice that the result still uses a four digit year (even though we provided the period argument as a two digit year).

Example 4 – Using the Current Date

This example derives the period from the current date. It then adds a month on to that period.

SELECT 
    CURDATE( ) AS 'Current Date',
    EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period',
    PERIOD_ADD(EXTRACT(YEAR_MONTH FROM CURDATE( )), 1) AS 'Next Period';

Result:

+--------------+----------------+-------------+
| Current Date | Current Period | Next Period |
+--------------+----------------+-------------+
| 2018-06-30   |         201806 |      201807 |
+--------------+----------------+-------------+

Example 5 – A Database Example

Here’s an example that queries a database.

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;

Result:

+---------------------+----------------+--------------+
| Payment Date        | Payment Period | Next Payment |
+---------------------+----------------+--------------+
| 2005-05-25 11:30:37 |         200505 |       200605 |
+---------------------+----------------+--------------+