SQL

MYSQLで過去(未来)の日付を取得

2013年5月27日

MYSQLで過去(未来日付)を取得する方法について記載します。


MYSQLで現在日付を取得する場合、date(now())で取得することができます。

mysql> select date(now()) from dual;
+-------------+
| date(now()) |
+-------------+
| 2013-05-27 |
+-------------+
1 row in set (0.00 sec)

このdate(now())+0を入れると型が変わります。

mysql> select date(now())+0 from dual;
+---------------+
| date(now())+0 |
+---------------+
| 20130527 |
+---------------+
1 row in set (0.00 sec)

過去日付で表示する場合、【date(now())-▲】したらいいですが、DATE型のままで過去日付を取得したい場合、【interval】関数を使います。

mysql> select date(now()- interval 1 day) from dual;
+-----------------------------+
| date(now()- interval 1 day) |
+-----------------------------+
| 2013-05-26 |
+-----------------------------+
1 row in set (0.00 sec)

【interval】関数は月単位、年単位も使えます。

mysql> select date(now()- interval 1 month) from dual;
+-------------------------------+
| date(now()- interval 1 month) |
+-------------------------------+
| 2013-04-27 |
+-------------------------------+
1 row in set (0.00 sec)

mysql> select date(now()- interval 1 year) from dual;
+------------------------------+
| date(now()- interval 1 year) |
+------------------------------+
| 2012-05-27 |
+------------------------------+
1 row in set (0.00 sec)

【interval】を使った後、に型変換することも可能です。

mysql> select date(now()- interval 1 year)+0 from dual;
+--------------------------------+
| date(now()- interval 1 year)+0 |
+--------------------------------+
| 20120527 |
+--------------------------------+
1 row in set (0.00 sec)

【― interval】を【+ interval】に変更すれば未来日付の設定もできます。

ここでしてはいけないのは【date(now())+▲】または【date(now())-▲】

日付を数字に置き換えてから計算されるので月を跨ぐとおかしな数字になります。(20130499とかになります)

これで躓いてしまい、記事のネタになりました(苦笑


P.S

月末日の取得方法も紹介しておきます。

月末(last_day)

mysql> select last_day(now()) from dual;
+-----------------+
| last_day(now()) |
+-----------------+
| 2013-05-31 |
+-----------------+
1 row in set (0.00 sec)


SQLにとって日付計算はよく使われると思うので覚えといても損はないと思います。

MYSQLにしか使えないですが……

今回は【from dual】をつけていますが、MYSQLは省略可能だそうです……知らなかった!

-SQL
-, , ,