首頁 >資料庫 >mysql教程 >如何在 MySQL 中產生兩個日期之間的日期清單?

如何在 MySQL 中產生兩個日期之間的日期清單?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-22 04:33:08445瀏覽

How to Generate a List of Dates Between Two Dates in MySQL?

產生兩個日期之間的日期列表

要取得兩個給定日期之間的日期列表,可以考慮使用類似 make_intervals 的預存程序來建立一個臨時表 time_intervals,其中填入了所需的區間。然後,您可以將資料表與 time_intervals 表連接起來,以獲得所需的輸出。

make_intervals 預存程序 (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
    -- 根据单位和区间计算下一个区间日期
    select
      case unitval
        when 'MICROSECOND' then timestampadd(MICROSECOND, intval, thisDate)
        when 'SECOND' then timestampadd(SECOND, intval, thisDate)
        when 'MINUTE' then timestampadd(MINUTE, intval, thisDate)
        when 'HOUR' then timestampadd(HOUR, intval, thisDate)
        when 'DAY' then timestampadd(DAY, intval, thisDate)
        when 'WEEK' then timestampadd(WEEK, intval, thisDate)
        when 'MONTH' then timestampadd(MONTH, intval, thisDate)
        when 'QUARTER' then timestampadd(QUARTER, intval, thisDate)
        when 'YEAR' then timestampadd(YEAR, intval, thisDate)
      end into nextDate;

    -- 将当前区间插入到临时表中
    insert into time_intervals select thisDate, timestampadd(MICROSECOND, -1, nextDate);
    set thisDate = nextDate;

  -- 继续直到当前日期达到或超过结束日期
  until thisDate >= enddate
  end repeat;
END;</code>

使用範例

例如,要建立 2009 年 1 月 1 日到 2009 年 1 月 13 日之間的日期列表,您可以如下呼叫 make_intervals 預存程序:

<code class="language-sql">call make_intervals('2009-01-01 00:00:00', '2009-01-13 00:00:00', 1, 'DAY');</code>

這將使用表示指定日期範圍內的每一天的區間填充 time_intervals 表。然後,您可以將資料表與 time_intervals 表連接起來,以根據這些區間匯總資料。

以上是如何在 MySQL 中產生兩個日期之間的日期清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn