MySQLで当月のカレンダーを作成する方法

記事内に広告が含まれています。

MySQLを利用した作業で当月の日付(カレンダー)自動で作成する必要があったので作成したSQLです。

仕様としては当時の日付から月末の日と、その月に含まれる日数を計算して、当月のカレンダーを作成します。

MySQLで当月のカレンダーを作成する方法

当月のカレンダーを作成するのに必要な情報として

  1. 当月の月末の日

を自動で求める必要があります。
実際の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で当月のカレンダーを作成する方法でした。

タイトルとURLをコピーしました