ホームページ >データベース >mysql チュートリアル >「generate_series()」を使用せずにMySQLで日付範囲を生成するにはどうすればよいですか?
MySQL の日付範囲の生成: 実践的なアプローチ
MySQL には、PostgreSQL の generate_series()
関数に直接相当する機能がありません。 ただし、SQL と変数を使用して日付範囲を賢く生成できます。この方法は、既存のカレンダー テーブルを使用せずに日付範囲を作成する必要がある場合に特に便利です。
例を挙げて説明しましょう。 売上表を想像してください:
date | qty |
---|---|
2011-01-01 | 3 |
2011-01-01 | 4 |
2011-04-01 | 2 |
2011-06-01 | 5 |
私たちの目標は、これを拡張して 2011 年全体の毎日の売上を表示することです。
date | qty |
---|---|
2011-01-01 | 7 |
2011-01-02 | 0 |
2011-01-03 | 0 |
2011-04-01 | 2 |
...and so on... |
これを実現する方法は次のとおりです:
<code class="language-sql">SELECT DATE_FORMAT(ADDDATE('2011-01-01', @num := @num + 1), '%Y-%m-%d') AS date FROM any_table, (SELECT @num := -1) AS num LIMIT 365;</code>
このクエリは、クエリが確実に実行されるように、プレースホルダとして any_table
(既存のテーブルでも使用可能) を使用します。 -1 に初期化された @num
変数は行ごとに増分し、「2011-01-01」から始まる連続した日付を生成します。 LIMIT 365
は出力をうるう年以外に制限します。閏年には LIMIT 366
を使用します。 DATE_FORMAT
関数は、一貫した日付形式を保証します。
この手法は、MySQL 内で日付範囲を生成し、日付ベースのクエリと分析を簡素化するための柔軟で効率的なソリューションを提供します。
以上が「generate_series()」を使用せずにMySQLで日付範囲を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。