什么是最直接的方式填充空的日期在sql结果(在mysql或perl end)?

我正在建立一个快速csv从一个mysql表与一个查询如:

select DATE(date),count(date) from table group by DATE(date) order by date asc;

并且只是将它们转储到Perl中的文件:

while(my($date,$sum) = $sth->fetchrow) {
    print CSV "$date,$sum\n"
}

但数据中有日期差距:

| 2008-08-05 |           4 | 
| 2008-08-07 |          23 | 

我想填充数据填充缺少的天数零计数条目结束:

| 2008-08-05 |           4 | 
| 2008-08-06 |           0 | 
| 2008-08-07 |          23 | 

我一起打了一个真正尴尬的(几乎肯定是buggy)解决方法与一个数组的每月和一些数学,但是在mysql或perl侧必须有一些更直接的东西。

任何天才的想法/拍打在脸上为什么我这么蠢?

我最终使用一个存储过程生成一个临时表的日期范围有问题的几个原因:

>我知道每一次我会寻找的日期范围
>有问题的服务器不幸的是,我可以在atm上安装perl模块,并且它的状态是破旧的,它没有任何远程日期::安装

perl Date / DateTime迭代答案也很不错,我希望我可以选择多个答案!

当您需要在服务器端需要类似的东西时,通常创建一个表,其中包含两个时间点之间的所有可能的日期,然后将此表与查询结果连接。这样的东西:

create procedure sp1(d1 date, d2 date)
  declare d datetime;

  create temporary table foo (d date not null);

  set d = d1
  while d <= d2 do
    insert into foo (d) values (d)
    set d = date_add(d, interval 1 day)
  end while

  select foo.d, count(date)
  from foo left join table on foo.d = table.date
  group by foo.d order by foo.d asc;

  drop temporary table foo;
end procedure

在这种特殊情况下,最好在客户端进行一点检查,如果当前日期不是previos 1,放一些额外的字符串。

http://stackoverflow.com/questions/75752/what-is-the-most-straightforward-way-to-pad-empty-dates-in-sql-results-on-eithe

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:什么是最直接的方式填充空的日期在sql结果(在mysql或perl end)?