目的
MySQL からデータを月次で抽出する必要がありました。
ある日にちから、月初と月末を取得する方法を調べました。
方法
SET @TARGET_DATE='2018/11/18';
-- @TARGET_DATE 月の月初
SELECT DATE_FORMAT(@TARGET_DATE, '%Y-%m-01');
-- @TARGET_DATE 月の月末
SELECT LAST_DAY(@TARGET_DATE);
出力結果
mysql> SET @TARGET_DATE='2018/11/18';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> -- @TARGET_DATE 月の月初
mysql> SELECT DATE_FORMAT(@TARGET_DATE, '%Y-%m-01');
+---------------------------------------+
| DATE_FORMAT(@TARGET_DATE, '%Y-%m-01') |
+---------------------------------------+
| 2018-11-01 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql>
mysql> -- @TARGET_DATE 月の月末
mysql> SELECT LAST_DAY(@TARGET_DATE);
+------------------------+
| LAST_DAY(@TARGET_DATE) |
+------------------------+
| 2018-11-30 |
+------------------------+
1 row in set (0.00 sec)
また、1ヶ月後、2ヶ月後を計算するときは、
SET @TARGET_DATE='2018/11/18';
SELECT DATE_FORMAT(ADDDATE(@TARGET_DATE, INTERVAL 1 MONTH), '%Y-%m-01');
出力結果
mysql> SELECT DATE_FORMAT(ADDDATE(@TARGET_DATE, INTERVAL 1 MONTH), '%Y-%m-01')
-> ;
+------------------------------------------------------------------+
| DATE_FORMAT(ADDDATE(@TARGET_DATE, INTERVAL 1 MONTH), '%Y-%m-01') |
+------------------------------------------------------------------+
| 2018-12-01 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)