要获取两个给定日期之间的日期列表,可以考虑使用类似 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中文网其他相关文章!