MySQLで連続した日付のデータを作成する
はじめに
自分用にコピペできるように残しておく
連続したある期間の日付をテストデータに使いたかったのが始まり
環境
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)
以上
Author And Source
この問題について(MySQLで連続した日付のデータを作成する), 我々は、より多くの情報をここで見つけました https://qiita.com/chanMatsu/items/1cca41ae89c1de214122著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .