【问题标题】:MySQL Best Approach to get all days between two date valuesMySQL获取两个日期值之间所有日期的最佳方法
【发布时间】:2013-11-13 14:36:57
【问题描述】:

我需要找到两个日期内的所有日期。这通常用

来完成

之间

,但我有一个 StartDate 和 en EndDate 列。这意味着日期实际上会持续几天。

所以一条记录可以有这样的值:

id、状态、startDateendDate

如果我为查询提供两个日期,我如何找到这些日期内的所有行。

【问题讨论】:

  • 您要返回日期范围完全在提供的日期内的记录、日期范围完全包含提供的日期的记录,还是日期范围与提供的日期有任何重叠的记录?
  • 我想要两个提供的日期之内和之内的所有日期。
  • 我想要那些包含...
  • 你的日期有时间成分吗?
  • 没有^^ 搜索完startdate后想通过php来做。

标签: mysql sql datetime


【解决方案1】:

要获取完整记录周期位于请求周期内的记录:

SELECT * 
FROM yourtable
WHERE startDate >= smallestDate AND 
      endDate <= largestDate;

要获取记录期间与请求期间相交的记录:

SELECT * 
FROM yourtable
WHERE startDate <= largestDate AND 
      endDate >= smallestDate;

并且,为了完整起见,获取记录期的开始位于请求期的记录,但您不关心记录期的结束:

SELECT * 
FROM yourtable
WHERE startDate BETWEEN smallestDate AND largestDate

对于记录期的结束日期,反之亦然:

SELECT * 
FROM yourtable
WHERE endDate BETWEEN smallestDate AND largestDate

(当然,所有示例都假定startDate 总是小于endDate。)

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2010-09-14
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多