ホームページ > データベース > mysql チュートリアル > MySQL でストアド プロシージャを使用して 2 つの日付の間の日付のリストを生成するにはどうすればよいですか?

MySQL でストアド プロシージャを使用して 2 つの日付の間の日付のリストを生成するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-22 04:49:09
オリジナル
162 人が閲覧しました

How Can I Generate a List of Dates Between Two Dates in MySQL Using a Stored Procedure?

2 つの日付間の日付のリストを生成します

2 つの日付間の日付のリストを取得することは、さまざまなデータ処理シナリオで一般的なニーズです。標準の MySQL 関数では、この機能のオプションが限られています。

日付のリストを生成する効率的な方法は、ストアド プロシージャを利用して一時テーブルにデータを取り込むことです。利用可能な詳細なプロセスは次のとおりです:

<code class="language-sql">CREATE PROCEDURE make_intervals(startdate timestamp, enddate timestamp, intval integer, unitval varchar(10))
BEGIN
    DECLARE thisDate timestamp;
    DECLARE nextDate timestamp;
    SET thisDate = startdate;

    DROP TEMPORARY TABLE IF EXISTS time_intervals;
    CREATE TEMPORARY TABLE IF NOT EXISTS time_intervals
        (
        interval_start timestamp,
        interval_end timestamp
        );

    REPEAT
        CASE unitval
            WHEN 'MICROSECOND' THEN SET nextDate = TIMESTAMPADD(MICROSECOND, intval, thisDate)
            WHEN 'SECOND' THEN SET nextDate = TIMESTAMPADD(SECOND, intval, thisDate)
            WHEN 'MINUTE' THEN SET nextDate = TIMESTAMPADD(MINUTE, intval, thisDate)
            WHEN 'HOUR' THEN SET nextDate = TIMESTAMPADD(HOUR, intval, thisDate)
            WHEN 'DAY' THEN SET nextDate = TIMESTAMPADD(DAY, intval, thisDate)
            WHEN 'WEEK' THEN SET nextDate = TIMESTAMPADD(WEEK, intval, thisDate)
            WHEN 'MONTH' THEN SET nextDate = TIMESTAMPADD(MONTH, intval, thisDate)
            WHEN 'QUARTER' THEN SET nextDate = TIMESTAMPADD(QUARTER, intval, thisDate)
            WHEN 'YEAR' THEN SET nextDate = TIMESTAMPADD(YEAR, intval, thisDate)
        END;

        INSERT INTO time_intervals SELECT thisDate, TIMESTAMPADD(MICROSECOND, -1, nextDate);
        SET thisDate = nextDate;
    UNTIL thisDate >= enddate
    END REPEAT;

END;</code>
ログイン後にコピー

使用法:

  1. 開始日、終了日、間隔の長さ、間隔単位を使用して make_intervals ストアド プロシージャを呼び出します。たとえば、「2009-01-01 00:00:00」と「2009-01-10 00:00:00」の間の毎日の間隔を生成するには、次のように呼び出します:
<code class="language-sql">CALL make_intervals('2009-01-01 00:00:00', '2009-01-10 00:00:00', 1, 'DAY');</code>
ログイン後にコピー
  1. データ テーブルを time_intervals テーブルと結合して、日付間隔に基づいてデータを集計します。例:
<code class="language-sql">SELECT
    aggregate_function(your_data_table.column_name) AS aggregated_value,
    time_intervals.interval_start AS date
FROM your_data_table
LEFT JOIN time_intervals ON (your_data_table.date_column BETWEEN time_intervals.interval_start AND time_intervals.interval_end)
GROUP BY time_intervals.interval_start;</code>
ログイン後にコピー

出力例:

<code>+----------------------------+----------+
| aggregated_value | date       |
+----------------------------+----------+
| 值1                  | 2009-01-01 |
| 值2                  | 2009-01-02 |
| 值3                  | 2009-01-03 |
| 值4                  | 2009-01-04 |
| 值5                  | 2009-01-05 |
| 值6                  | 2009-01-06 |
| 值7                  | 2009-01-07 |
| 值8                  | 2009-01-08 |
| 值9                  | 2009-01-09 |
+----------------------------+----------+</code>
ログイン後にコピー

このメソッドは、指定された 2 つの日付の間の日付のリストを生成する柔軟な方法を提供し、日付間隔に基づいた便利で効率的なデータ集計を可能にします。

以上がMySQL でストアド プロシージャを使用して 2 つの日付の間の日付のリストを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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