howdylikes

Google Developersってわかりづらいよね

MySQLで日付の連番レコードを作る

テスト時のデータ投入とかで便利なのでメモ

例えばこういうデータがほしい時

2015-10-01
2015-10-02
2015-10-03
・・・
2015-10-31
SET @from_date = DATE_ADD('2015-10-01', INTERVAL -1 DAY);
SET @to_date    = '2015-10-31';
SELECT @from_date:=DATE_ADD(@from_date, INTERVAL 1 DAY)
FROM mysql.time_zone
WHERE @from_date < @to_date;

f:id:howdy39:20151028083854p:plain:w600

mysql.time_zoneはどのテーブルでも構わないのですがレコード数がある程度ないとその分作られないので注意。 変数は別に使わなくてもいいのですが変数にしておけばリサイクルしやすいです。

CROSS JOINしてユーザーごとの日付を作るとかもできますよね。

SET @from_date = DATE_ADD('2015-10-01', INTERVAL -1 DAY);
SET @to_date    = '2015-10-31';

SELECT * FROM 
(SELECT DISTINCT user
  FROM mysql.user
  WHERE user != ''
) AS target_user,
(SELECT @from_date:=DATE_ADD(@from_date, INTERVAL 1 DAY)
  FROM mysql.time_zone
  WHERE @from_date < @to_date
) AS target_date;

f:id:howdy39:20151028084823p:plain:w600