无需日历表,巧妙生成MySQL日期范围
PostgreSQL 的 generate_series()
函数可以方便地生成日期范围。然而,MySQL 没有直接等效的函数。本文提供一种解决方案,帮助您在MySQL中实现类似的功能。
挑战
经常需要执行涉及将数据与完整日期范围连接的查询。但是,如果您的数据库没有特定的日历表,此任务可能会很繁琐。
MySQL解决方案
使用提供的示例表在MySQL中创建日期范围:
<code class="language-sql">SELECT DATE_FORMAT( ADDDATE('2011-1-1', @num := @num + 1), '%Y-%m-%d' ) AS 日期 FROM 任意表, (SELECT @num := -1) AS num LIMIT 365;</code>
说明
此查询使用以下步骤生成从'2011-01-01'到'2011-12-31'的日期范围:
任意表
用作参考,以创建虚拟行号范围,从 -1 到 364(闰年为 -1 到 365)。ADDDATE()
函数将适当的天数添加到起始日期。DATE_FORMAT()
函数将生成的日期格式化为所需的 'YYYY-MM-DD' 格式。集成
此查询可以用作主查询中的子查询,以与您的原始表连接。例如:
<code class="language-sql">SELECT t.日期, COALESCE(d.qty, 0) AS qty FROM ( SELECT DATE_FORMAT( ADDDATE('2011-1-1', @num := @num + 1), '%Y-%m-%d' ) AS 日期 FROM 任意表, (SELECT @num := -1) AS num LIMIT 365 ) AS t LEFT JOIN 原始表 AS d ON t.日期 = d.日期;</code>
此查询将返回所需的结果,其中缺少日期的行将填充为 '0' qty 值。
以上是如何在没有日历表的情况下在 MySQL 中生成日期范围?的详细内容。更多信息请关注PHP中文网其他相关文章!