MySQL で日付シーケンスを生成します
質問:
PostgreSQL のgenerate_series() 関数と同様に、MySQL で日付シリーズを作成するにはどうすればよいですか?
答え:
MySQL には、generate_series() に直接相当するものはありませんが、次の手順に従って同様の結果を得ることができます。
次に、2011 年 1 月 1 日から 2011 年 12 月 31 日までの日付範囲を作成するサンプル クエリを示します。
<code class="language-sql">SELECT DATE_FORMAT( ADDDATE('2011-01-01', @num := @num + 1), '%Y-%m-%d' ) AS 日期 FROM 任意表, (SELECT @num := -1) AS num LIMIT 365;</code>
このクエリ内:
任意表
は、1 つ以上の行を含む一時テーブルです (行数のみが使用されるため、任意のテーブルを使用できます)。 @num := @num 1
0 から始まる連続した数字のシーケンスを作成します。 ADDDATE('2011-01-01', @num := @num 1)
対応する日付間隔を各数値に加算します。 DATE_FORMAT()
生成された日付を目的の形式にフォーマットします。 LIMIT 365
生成する日付の数を指定します (うるう年以外の場合は 365)。 この方法を使用すると、別のカレンダー テーブルを必要とせずに、MySQL で日付シーケンスを生成できます。 任意表
は既存のテーブルに置き換えることも、一時データ行の作成に使用することもできることに注意してください。 MySQL 自体は PostgreSQL SELECT 1 UNION ALL SELECT 1 ...
のような直接関数を提供していないため、これは回避策です。 generate_series
以上がMySQL で日付シリーズを生成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。