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 月の差分を計算する方法