MySQLを利用した作業で当月の日付(カレンダー)自動で作成する必要があったので作成したSQLです。
仕様としては当時の日付から月末の日と、その月に含まれる日数を計算して、当月のカレンダーを作成します。
MySQLで当月のカレンダーを作成する方法
当月のカレンダーを作成するのに必要な情報として
を自動で求める必要があります。
実際のSQLは以下のようになります。
select d.ymd as ymd from( select date_format(date_add(date_add(last_day( now()), interval - day(last_day(now())) DAY ) , interval td.add_day DAY ), '%Y-%m-%d' ) as ymd from( select 0 as add_day from dual where ( @num := 1 - 1 ) * 0 union all select @num := @num + 1 as add_day from `information_schema`.columns limit 31 ) as td ) as d where month(d.ymd) = month(now()) order by d.ymd
上記のSQLの実行結果は以下の通りです。
ymd |
---|
2019-08-01 |
2019-08-02 |
2019-08-03 |
2019-08-04 |
2019-08-05 |
2019-08-06 |
2019-08-07 |
2019-08-08 |
2019-08-09 |
2019-08-10 |
2019-08-11 |
2019-08-12 |
2019-08-13 |
2019-08-14 |
2019-08-15 |
2019-08-16 |
2019-08-17 |
2019-08-18 |
2019-08-19 |
2019-08-20 |
2019-08-21 |
2019-08-22 |
2019-08-23 |
2019-08-24 |
2019-08-25 |
2019-08-26 |
2019-08-27 |
2019-08-28 |
2019-08-29 |
2019-08-30 |
2019-08-31 |
解説
当月の末日の日付は
select last_day(now())
で取得することができます。
上記のSQLでは当月の末日からその月の日数分
select 0 as add_day from dual where ( @num := 1 - 1 ) * 0 union all select @num := @num + 1 as add_day from `information_schema`.columns limit 31
で作成した0から31までの数字を引き算した日を取得し、
where month(d.ymd) = month(now())
で当月の日付だけ抜き出して表示させています。
まとめ
SQLを見た感じ難しそうですが、処理を1つ1つ追えばそれほど難しい処理ではないので、ぜひ使ってみてください。
以上、MySQLで当月のカレンダーを作成する方法でした。