【问题标题】:MySQL display all date in between range [duplicate]MySQL显示范围内的所有日期[重复]
【发布时间】:2013-02-19 19:24:31
【问题描述】:

我想显示来自 MySQL 的 fromto 日期之间的所有日期。

例如schedule 表中具有fromto 字段的数据是:

from 日期为2013-3-13,并且

to 日期为2013-3-20

我想要的结果是:

 2013-3-13
 2013-3-14
 2013-3-15
 2013-3-16
 2013-3-17
 2013-3-18
 2013-3-19
 2013-3-20

如何仅使用 MySQL 查询来实现这一点(不必使用存储过程,因为我不熟悉它)?

编辑:

The answer here 非常有帮助,尽管我仍然没有完全得到想要的东西。在this sample,它只运行成功,不输出任何东西。而且我不知道问题出在哪里。

请帮忙。谢谢!

【问题讨论】:

  • 这个日期是否存在于数据库中,或者您想填补日期之间的空白?
  • 只有从和到的日期存在。中间的日期不是,所以我想填补空白。
  • 好的,这里有一篇很棒的文章来填写日期Using MySQL to generate daily sales reports with filled gaps基本上是创建一个日历。
  • 有更简单的方法吗?我的意思是不添加 MySQL 程序?
  • @bluefeet,接受的答案很棒。但是,当我将日期更改为 2013-3-12013-3-13 时,输出范围仅从 2013-3-12013-3-5

标签: mysql date range


【解决方案1】:

您可以使用以下内容生成日期列表:

select a.Date,  s.*
from 
(
  select curdate() + INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
  from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
  cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
  cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) a
inner join schedule s
  on a.Date >= s.fromDate 
  and a.Date <= s.toDate

SQL Fiddle with Demo

【讨论】:

  • 如何将另一个查询与此代码合并? SELECT acode FROM reservation?谢谢。
  • @xjshiya 请发布一个新问题,其中包含有关新问题的详细信息。这将比在 cmets 中来回更容易。 :)
【解决方案2】:

尝试从日期是 2013-3-13,到日期是 2013-3-20,

"SELECT * FROM schedule WHERE Field BETWEEN $fromdate AND $todate";

【讨论】:

  • -1 他不想打印两个日期之间的所有行,而是想打印给定两个日期之间的所有dates
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多