おれの技術日記

元はJava+SQLがメインのエンジニア、フロントエンドは軽くかじった程度で苦手。最近忘れっぽいので覚えたことをいろいろメモするためにブログ開始。

MySQLでカレンダーテーブルを作る

自分がよく使うSQLをライブラリ的にここに残しておく。

こんな感じでSQLを書くと

SELECT
   @date:=date(date_format(CURRENT_DATE(),'%Y-%m-01')) as Date
UNION ALL
SELECT
   @date:=DATE_ADD(@date, INTERVAL 1 DAY)
FROM
   `テーブル名`
WHERE
   @date < last_day(CURRENT_DATE())

こんな感じで結果セットが取れる。

Date
2017-08-01
2017-08-02
・・・
2017-08-31

この時、SQLの中で参照するテーブルはどんな構造になっていてもかまわないけれど、ここで取得する日付範囲よりも多いレコードを持っている必要がある。
例えば上の例でいえば`テーブル名`は30レコード以上持っている必要がある。