要取得兩個給定日期之間的日期列表,可以考慮使用類似 make_intervals
的預存程序來建立一個臨時表 time_intervals
,其中填入了所需的區間。然後,您可以將資料表與 time_intervals
表連接起來,以獲得所需的輸出。
make_intervals
預存程序 (MySQL)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;
例如,要建立 2009 年 1 月 1 日到 2009 年 1 月 13 日之間的日期列表,您可以如下呼叫 make_intervals
預存程序:
call make_intervals('2009-01-01 00:00:00', '2009-01-13 00:00:00', 1, 'DAY');
這將使用表示指定日期範圍內的每一天的區間填充 time_intervals
表。然後,您可以將資料表與 time_intervals
表連接起來,以根據這些區間匯總資料。
以上是如何在 MySQL 中產生兩個日期之間的日期清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!