Gui*_*ara 11 mysql sql date date-range
我有一个名为'events'的MySQL表,其中包含事件数据.重要的列是'start'和'end',它们包含字符串(YYYY-MM-DD)以表示事件的开始和结束时间.
我想获取一段时间内所有活动事件的记录.
事件:
------------------------------ ID | START | END | ------------------------------ 1 | 2013-06-14 | 2013-06-14 | 2 | 2013-06-15 | 2013-08-21 | 3 | 2013-06-22 | 2013-06-25 | 4 | 2013-07-01 | 2013-07-10 | 5 | 2013-07-30 | 2013-07-31 | ------------------------------
请求/搜索:
Example: All events between 2013-06-13 and 2013-07-22 : #1, #3, #4 SELECT id FROM events WHERE start BETWEEN '2013-06-13' AND '2013-07-22' : #1, #2, #3, #4 SELECT id FROM events WHERE end BETWEEN '2013-06-13' AND '2013-07-22' : #1, #3, #4 ====> intersect : #1, #3, #4
Example: All events between 2013-06-14 and 2013-06-14 : SELECT id FROM events WHERE start BETWEEN '2013-06-14' AND '2013-06-14' : #1 SELECT id FROM events WHERE end BETWEEN '2013-06-14' AND '2013-06-14' : #1 ====> intersect : #1
我尝试了很多查询仍然无法获得确切的SQL查询.
你不知道怎么做吗?有什么建议?
谢谢!
Fab*_*bio 17
如果我理解正确您尝试使用单个查询,我认为您可以将日期搜索合并到WHERE
句子中
SELECT id
FROM events
WHERE start BETWEEN '2013-06-13' AND '2013-07-22'
AND end BETWEEN '2013-06-13' AND '2013-07-22'
Run Code Online (Sandbox Code Playgroud)
或者更简单地说,您可以使用两列来设置搜索时间过滤器
SELECT id
FROM events
WHERE start >= '2013-07-22' AND end <= '2013-06-13'
Run Code Online (Sandbox Code Playgroud)
Pet*_*oot 14
您需要在范围内开始和结束的事件.但这并非全部:您还需要在范围内开始的事件以及在范围内结束的事件.但是你仍然不在那里,因为你也想要在范围之前开始并在范围之后结束的事件.
简化:
因为第2点导致记录也符合第3点中的查询,所以我们只需要第1点和第3点
所以SQL成为:
SELECT * FROM events
WHERE start BETWEEN '2014-09-01' AND '2014-10-13'
OR '2014-09-01' BETWEEN start AND end
Run Code Online (Sandbox Code Playgroud)
这里有很多好的答案,但我认为这会对某人有所帮助
select id from campaign where ( NOW() BETWEEN start_date AND end_date)
Run Code Online (Sandbox Code Playgroud)
SELECT id
FROM events
WHERE start <= '2013-07-22'
AND end >= '2013-06-13';
Run Code Online (Sandbox Code Playgroud)
或者MIN()
,MAX()
如果您不知道优先级,请使用和。
小智 5
SELECT *
FROM events
WHERE endDate >= @startDate AND startDate <= @endDate
Run Code Online (Sandbox Code Playgroud)
有关解释请参考此图:
[startDate: 2020-10-01, endDate: 2020-20-01]
@startDate
并@endDate
搜索因此,为了通过提供开始日期和结束日期来获取重叠日期,endDate 必须大于 @startDate,startDate 必须小于 @endDate。