【问题标题】:WHERE clause to get events which (could) span into a new dayWHERE 子句获取(可能)跨越新一天的事件
【发布时间】:2015-01-23 02:52:39
【问题描述】:

我有代表事件的数据。重要的列是

StartDate (date)
StartTime (time)
EndDate (date)
EndTime (time)

我的 where 子句是

WHERE HOUR(L.StartTime) <= 14 AND HOUR(L.EndTime) > 14 
AND DATE(NOW()) >= L.StartDate AND DATE(NOW()) <= L.EndDate 
AND L.StartDate <= '2015-01-22' AND L.EndDate >= '2015-01-22'

这将返回我在下午 2 点之前或下午 2 点开始以及在下午 3 点或更晚结束的任何事件。 StartDate 和 EndDate 是这个事件的范围,例如一个事件可能在一月份的每一天发生,或者更长的时间。

现在的问题是,如果其中一个事件有这样的数据:

StartDate    |    StartTime    |    EndDate    |    EndTime
2015-01-01   |    14:00:00     |    2015-12-31 |    01:00:00

意思是活动从下午 2 点到次日凌晨 1 点开始。我的查询不会返回该行,因为

AND HOUR(L.EndTime) > 14 

条款。

【问题讨论】:

    标签: mysql date


    【解决方案1】:

    为什么不是或?原始搜索,或陈述的可能性:

    WHERE (HOUR(L.StartTime) <= 14 AND HOUR(L.EndTime) > 14 
    AND DATE(NOW()) >= L.StartDate AND DATE(NOW()) <= L.EndDate 
    AND L.StartDate <= '2015-01-22' AND L.EndDate >= '2015-01-22')
    OR (HOUR(L.StartTime) <= 14
    AND DATE(NOW()) >= L.StartDate AND DATE(NOW()) <= L.EndDate
    AND L.StartDate <= '2015-01-22' AND L.EndDate >= '2015-01-22'
    AND L.StartDate != L.EndDate)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2020-02-19
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      相关资源
      最近更新 更多