0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQLで連続した日付のデータを作成する

Posted at

はじめに

自分用にコピペできるように残しておく

連続したある期間の日付をテストデータに使いたかったのが始まり

環境

MySQL バージョン忘れた

参考サイト

やり方

TEST_TABLE_1 にTEST_TABLE_2からデータを持ってきつつ、連続した日付になるようなデータにしたい。
まず結果から、

SET @start_day = '2021-01-01'; #期間の始め
SET @end_day = '2021-02-01';   #期間の終わり
INSERT INTO
    TEST_TABLE_1 (COLUMN_1, COLUMN_2, DATE_1)
SELECT
     TEST_TABLE_2.DATA_1 #TEST_TABLE_2からデータを持ってくる
    ,TEST_TABLE_2.DATA_2 #TEST_TABLE_2からデータを持ってくる
    ,TEST_DATE.DAY
FROM
    TEST_TABLE_2 INNNER JOIN (
        SELECT DATE_FORMAT(DATE_ADD(@start_day, INTERVAL tmp.series DAY), '%Y-%m-%d') AS DAY
        FROM (
            SELECT 0 series FROM DUAL WHERE (@num:=-1)*0 UNION ALL
            SELECT @num:=@num+1 FROM `information_schema`.COLUMNS
        ) AS tmp
        HAVING DATE_FORMAT(day, '%Y-%m-%d') < @end_day
    ) AS TEST_DATE
;

こんな感じでいけた。
登録されるデータはこんな感じ

DATA_1,DATA_2,2021-01-01
DATA_1,DATA_2,2021-01-02
:
DATA_1,DATA_2,2021-01-30
DATA_1,DATA_2,2021-01-31

TEST_DATEについて、

SET @start_day = '2021-01-01'; #期間の始め
SET @end_day = '2021-02-01';   #期間の終わり
SELECT DATE_FORMAT(DATE_ADD(@start_day, INTERVAL tmp.series DAY), '%Y-%m-%d') AS DAY
FROM (
	SELECT 0 series FROM DUAL WHERE (@num:=-1)*0 UNION ALL
    SELECT @num:=@num+1 FROM `information_schema`.COLUMNS
) AS tmp
HAVING DATE_FORMAT(day, '%Y-%m-%d') < @end_day
;

この結果がこれ

day
----------
2021-01-01
2021-01-02
:
2021-01-30
2021-01-31

まとめ

バージョンによっては警告がでるかも。(テストに使うデータを作成するだけなので無視でOK)

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?