ホームページ > データベース > mysql チュートリアル > 「generate_series()」を使用せずにMySQLで日付範囲を生成するにはどうすればよいですか?

「generate_series()」を使用せずにMySQLで日付範囲を生成するにはどうすればよいですか?

DDD
リリース: 2025-01-14 09:15:53
オリジナル
846 人が閲覧しました

How to Generate Date Ranges in MySQL Without `generate_series()`?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート