首页 > 数据库 > mysql教程 > 如何填充 MySQL 日期范围中缺失的日期?

如何填充 MySQL 日期范围中缺失的日期?

Mary-Kate Olsen
发布: 2025-01-23 16:56:09
原创
734 人浏览过

How to Fill Missing Dates in MySQL Date Ranges?

在MySQL中填充日期范围内的缺失日期

在MySQL中,处理缺失日期需要确定所需的日期并用适当的值填充缺口。幸运的是,有一个解决方案,它涉及利用NUMBERS表技巧来生成递增日期列表。

首先,创建一个包含自动递增id列的NUMBERS表:

<code class="language-sql">CREATE TABLE numbers (
  id int(10) unsigned NOT NULL auto_increment,
   PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</code>
登录后复制

使用INSERT语句填充表中所需数量的值。

接下来,使用DATE_ADD根据id值生成日期列表:

<code class="language-sql">SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY)
FROM `numbers` `n`
WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14'</code>
登录后复制

分别将“2010-06-06”和“2010-06-14”替换为您自己的起始日期和结束日期。

最后,根据时间部分与数据表执行LEFT JOIN:

<code class="language-sql">SELECT `x`.`ts` AS `timestamp`,
          COALESCE(`y`.`score`, 0) AS `cnt`
     FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%Y-%m-%d') AS `ts`
             FROM `numbers` `n`
            WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x
LEFT JOIN `y` ON STR_TO_DATE(`y`.`date`, '%d.%m.%Y') = STR_TO_DATE(`x`.`ts`, '%Y-%m-%d')</code>
登录后复制

在这个查询中,缺失日期将填充为0。为了保持原始日期格式,可以使用DATE_FORMAT(x.ts, '%d.%m.%Y') AS timestamp。 注意,这里对y表进行了修改,确保日期格式一致,使用STR_TO_DATE函数进行转换。 这比原文中的方法更可靠。

以上是如何填充 MySQL 日期范围中缺失的日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板