私が探している答えを見つけることができないようです。mysqlの日付範囲を作成
2010-11-01から2015-01-01までの日付範囲をテーブルに作成したいと考えています。など
2010-11-01 2010-11-02 2010-11-03 ...
列のデータ型は、 '日付'
おかげ
私が探している答えを見つけることができないようです。mysqlの日付範囲を作成
2010-11-01から2015-01-01までの日付範囲をテーブルに作成したいと考えています。など
2010-11-01 2010-11-02 2010-11-03 ...
列のデータ型は、 '日付'
おかげ
DROP PROCEDURE IF EXISTS datespopulate;
DELIMITER |
CREATE PROCEDURE datespopulate(dateStart DATE, dateEnd DATE)
BEGIN
WHILE dateStart <= dateEnd DO
INSERT INTO datetable (d) VALUES (dateStart);
SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
END WHILE;
END;
|
DELIMITER ;
CALL datespopulate('2010-11-01','2015-01-01');
注私は「datetable
」私のテーブルの名前と列は「d
」と命名されていますが、これを変更して自由に感じます。私の終わりにうまく動作します。問題に就いたら、教えてください。
ボールを転がすためのジョーへの栄誉。 ;-)
であるあなたは確かに取ることができますブルートフォースアプローチ。
set @d = cast('2010-11-01' as date);
while (@d < '2015-01-02') do
insert into YourTable
(YourColumn)
values
(@d);
set @d = date_add(@d, interval 1 day);
end while;
@Joe: 'DECLAREはBEGIN ... END複合文内でのみ使用できます。他のステートメントよりも前になければなりません。 '([DECLARE構文](http://dev.mysql.com/doc/refman/5.0/en/declare.html) - 手続きが必要だと思いますが、正しい軌道に乗っています) –
@ブラッド:ありがとう。編集された答え。 –
@ Joe:while条件でも構文エラーが表示されます。これはあなたの目的のために機能しますか? –
これは古いスレッドであることを認識していますが、便利であり、Bradの手続きにSET AUTOCOMMIT = 0を追加することをお勧めしたいと思います。これによりパフォーマンスが大幅に向上します(私のシステムでは、2時間から4秒まで)。詳細はこちらをご覧ください:
http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-transaction-management.html
私が投稿した回答をご覧ください。 –
プロシージャを使用しなくても可能です。こちらを参照してください。 http://stackoverflow.com/questions/2157282/generate-days-from-date-range – mathheadinclouds