こんにちは、さるまりんです。
以前、PostgreSQLで月初、月末日を取得する方法を書きました。
今回は同じことをMySQLでやってみます。
まずは当月月初です。
last_day(curdate() - interval 1 month) + interval 1 day
で取得できます。
curdate()
で現在の日付を取得、そのひと月前の月の最終日をlast_day()
で取得、プラス1日して当月月初です。
mysql> select last_day(curdate() - interval 1 month) + interval 1 day as beg_of_cur_month;
+------------------+
| beg_of_cur_month |
+------------------+
| 2024-01-01 |
+------------------+
1 row in set (0.00 sec)
curdate()、 last_day()とinterval
の+
/-
を使っていろんな日が取れます。
翌月月初はこれです。
last_day(curdate()) + interval 1 day
現在の日付の月の最終日にプラス1日です。
mysql> select last_day(curdate()) + interval 1 day as beg_of_next_month;
+-------------------+
| beg_of_next_month |
+-------------------+
| 2024-02-01 |
+-------------------+
1 row in set (0.00 sec)
前月月初はこれです。
last_day(curdate() - interval 2 month) + interval 1 day
2ヶ月前の月の最終日の次の日ですね。
mysql> select last_day(curdate() - interval 2 month) + interval 1 day as beg_of_prev_month;
+-------------------+
| beg_of_prev_month |
+-------------------+
| 2023-12-01 |
+-------------------+
1 row in set (0.00 sec)
last_day()
を使ってきているので明らからですが月末日です。
それぞれ当月末、翌月末、全月末です。
last_day(curdate())
last_day(curdate() + interval 1 month)
last_day(curdate() - interval 1 month)
実行してみました
mysql> select last_day(curdate()) as end_of_cur_month,
-> last_day(curdate() + interval 1 month) as end_of_next_month,
-> last_day(curdate() - interval 1 month) as end_of_prev_month;
+------------------+-------------------+-------------------+
| end_of_cur_month | end_of_next_month | end_of_prev_month |
+------------------+-------------------+-------------------+
| 2024-01-31 | 2024-02-29 | 2023-12-31 |
+------------------+-------------------+-------------------+
1 row in set (0.00 sec)
以前も同じようにしましたが、Timestampカラムcreated
を持つテーブルaccess_logs
に前月に記録されたレコード数をとるselect
はこうなります。
select count(*) from access_logs
where created >= last_day(curdate() - interval 2 month) + interval 1 day
and created < last_day(curdate() - interval 1 month) + interval 1 day;
RDSによって少しずつ違いますが、同じことをする方法は何かしらありますね。
それぞれ勉強していきたいと思います。
読んでくださってありがとうございました。
それではまた!