mySQL DATETIME查询在两个日期之间的记录

4

我有一个名为“events”的MySQL表,包含4个字段(event_id、event_name、event_start_date、event_end_date)

问题在于如何检索正确的事件记录。

举例来说,在2011/03/01至2011/03/30之间,我想获取所有活动事件的记录:

  1. 事件1开始于2011/03/10并结束于2011/03/20(起始和结束时间都在这段时间期限内)
  2. 事件2开始于2011/02/05并结束于2011/03/23(起始时间早于这段时间期限,但结束时间在期限内)
  3. 事件3开始于2011/03/25并结束于2011/05/01(起始时间在期限内,但结束时间晚于期限)
  4. 事件4开始于2011/01/25并结束于2011/10/12(起始时间早于期限,结束时间晚于期限)

所有事件在这段时间期限内都处于活动状态,应该作为记录被检索出来。

我不知道如何使其正常工作!有什么解决方案、建议或想法吗?

谢谢


我的回答最终变成了一条评论,我无法删除...唉 - Paul Morgan
这个问题有一个适用的类似答案。Mark Buyers已经为这个问题给出了具体的答案。 - Paul Morgan
3个回答

3
假设 @Start 和 @End 包含你要查找的日期范围:
SELECT * FROM Events
  -- Exclude items known to be outside the range
WHERE NOT ((event_end_date < @Start) OR (event_start_date > @End))

不用谢。别忘了,如果有任何答案解决了你的问题,你应该点击那个答案旁边的复选框,让未来的访问者知道它是解决你问题的答案。 - competent_tech

2

试试这个:

SELECT
    event_id,
    event_name,
    event_start_date,
    event_end_date
FROM events
WHERE event_start_date <= '2011-03-30'
AND event_end_date >= '2011-03-01'

仅返回在2011/03/10开始并在2011/03/20结束的事件1,而不包括其他事件。 - GAVELLO
@GAVELLO:你为什么这么想?你是在猜测还是已经尝试过了?如果你已经尝试过,请发布你尝试的确切查询。 - Mark Byers
//$sql = 'SELECT * FROM '. self::$table_name .' WHERE event_start_date >= "'. $start_date .'" AND event_end_date <= "'. $end_date.'"' ;//$sql = 'SELECT * FROM '. self::$table_name .' WHERE event_start_date >= "'. $start_date .'" AND event_end_date <= "'. $end_date.'"' ; - GAVELLO
WHERE event_start_date <= '2011-03-30' AND event_end_date >= '2011-03-01'(就像你写的那样)只返回事件3和4,而不是1和2。 - GAVELLO
1
@GAVELLO:你为什么改变了查询语句?我写的是 WHERE event_start_date <= '2011-03-30' AND event_end_date >= '2011-03-01',而你却把它改成了 WHERE event_start_date >= '2011-03-01' AND event_end_date <= '2011-03-30'。显然,如果你不理解自己在做什么就随意更改代码,那么它肯定行不通,对吧? - Mark Byers

0
Select * From temp where mydate >= '2011-03-10' and mydate =< '2011-03-20';

等等


这并不容易,这将仅返回在时间段内开始和结束的事件。 - GAVELLO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接