年月型が無いため、月の計算が面倒
カラムに年月のみを持ちたいケースが結構あると思います。
僕はint型で[YYYYMM]形式の数値を持たせることが多いのですが、
月の加算が必要な場合、int型であるためにDATE_ADD() などの便利な関数が使えません。
201212 + 1(か月) = 201301 とはならないですよね当然。
MySQLに年月型というのは存在しませんが、以下の関数を使うことで、int型を年月型として使いやすくなります。
PERIOD_*系の関数で年月型のようにint型を扱う
PERIOD_* 系の関数を使うと、YYYYMM形式の数値に対して、あたかも年月型であるかのように計算ができます。
PERIOD_ADD(P,Ns)
N 月を、期間 P に加えます (フォーマットは YYMM または YYYYMM) 。フォーマット YYYYMM で値を返します。期間引数 P は日付値ではありません のでご注意ください。
PERIOD_DIFF(P1,P2)
期間 P1 と P2 間の月の数を返します。P1 および P2 は、YYMM または YYYYMM のフォーマットになります。期間引数 P1 および P2 は日付値ではありませんのでご注意ください。
PERIOD_*関数を実際に試す
結果を見ればわかる通り、
- 201212 に 1(か月) を足すと → 201301
- 201212 と 201112 の差は → 12(か月)
という結果になりました。
※MySQL 5.1.46環境で実行しました。
mysql> CREATE TABLE test
-> (
-> id int NOT NULL AUTO_INCREMENT,
-> month int NOT NULL,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO test (month) VALUES (201212);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test;
+----+--------+
| id | month |
+----+--------+
| 1 | 201212 |
+----+--------+
1 row in set (0.00 sec)
mysql> SELECT PERIOD_ADD(month, 1) AS month FROM test WHERE id = 1;
+--------+
| month |
+--------+
| 201301 |
+--------+
1 row in set (0.08 sec)
mysql> SELECT PERIOD_DIFF(month, 201112) AS month FROM test WHERE id = 1;
+-------+
| month |
+-------+
| 12 |
+-------+
1 row in set (0.00 sec)
mysql>
これは便利。


最近のコメント