MySQLで、月の差分を計算する方法をお伝えします。計算は、PERIOD_DIFF関数を用いれば簡単に求めることができます。これは、二つの期間の差の月数を返す関数です。

PERIOD_DIFF(P1, P2)

月の差分はP1-P2として計算されます。二つの引数は、「YYMM」または「YYYYMM」でなければなりません。また、DATE型でもないことに注意が必要です。実際に、いくつか試してみます。


SELECT PERIOD_DIFF(201512, 201501);
(out)+-----------------------------+
(out)| PERIOD_DIFF(201512, 201501) |
(out)+-----------------------------+
(out)|                          11 |
(out)+-----------------------------+
(out)1 row in set (0.00 sec)

SELECT PERIOD_DIFF(201501, 201512);
(out)+-----------------------------+
(out)| PERIOD_DIFF(201501, 201512) |
(out)+-----------------------------+
(out)|                         -11 |
(out)+-----------------------------+
(out)1 row in set (0.00 sec)

二つのDATE型のカラムから月の差分を計算するにはDATE_FORMAT関数を用いて、次のようにします。d1とd2をDATE型とします。


PERIOD_DIFF(DATE_FORMAT(d1, '%Y%m'), DATE_FORMAT(d2, '%Y%m'))

適当なデータベースとテーブルを作成して実際に試してみます。


CREATE DATABASE sample_database;
(out)Query OK, 1 row affected (0.00 sec)
(out)
USE sample_database;
(out)Database changed
(out)
CREATE TABLE sample_table(d1 DATE, d2 DATE);
(out)Query OK, 0 rows affected (0.00 sec)
(out)
INSERT INTO sample_table VALUES ('2015-12-01', '2015-01-01');
(out)Query OK, 1 row affected, 2 warnings (0.00 sec)
(out)
SELECT PERIOD_DIFF(DATE_FORMAT(d1, '%Y%m'), DATE_FORMAT(d2,'%Y%m')) FROM sample_table;
(out)+--------------------------------------------------------------+
(out)| PERIOD_DIFF(DATE_FORMAT(d1, '%Y%m'), DATE_FORMAT(d2,'%Y%m')) |
(out)+--------------------------------------------------------------+
(out)|                                                           11 |
(out)+--------------------------------------------------------------+
(out)1 row in set (0.00 sec)
MySQL 月の差分を計算する方法