MySQL で日付計算

mysql の関数で日付を扱う場合のメモ。

リファレンスマニュアルはコチラ

日付の計算はいろいろと面倒だから、その辺はしっかりと関数で提供されている。

たとえば、今日の日付は CURRENT_DATE()、あるいは CURDATE() で得られる。

mysql> SELECT CURRENT_DATE();
+—————-+
| CURRENT_DATE() |
+—————-+
| 2010-11-08 |
+—————-+
1 row in set (0.00 sec)

そして、「昨日」は DATE_SUB() を利用して以下のように得られる。

mysql> SELECT DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY);
+——————————————+
| DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) |
+——————————————+
| 2010-11-07 |
+——————————————+
1 row in set (0.00 sec)

「曜日」に関しては以下のような関数群が用意されている。

+——————–+
| DAYNAME(CURDATE()) |
+——————–+
| Monday |
+——————–+
1 row in set (0.00 sec)

mysql> SELECT DAY(CURDATE());
+—————-+
| DAY(CURDATE()) |
+—————-+
| 8 |
+—————-+
1 row in set (0.00 sec)

mysql> SELECT DAYOFWEEK(CURDATE());
+———————-+
| DAYOFWEEK(CURDATE()) |
+———————-+
| 2 |
+———————-+
1 row in set (0.00 sec)

今月は何日までだっけ? という時には LAST_DAY 関数。

mysql> SELECT LAST_DAY(CURDATE());
+———————+
| LAST_DAY(CURDATE()) |
+———————+
| 2010-11-30 |
+———————+
1 row in set (0.00 sec)

などなど。