1

我在解决这个问题时遇到了问题。这是我的查询:

SELECT * FROM events WHERE date('2012-9-4') >= start_date AND 
date('2012-9-4') <= end_date

现在正如您从上面看到的那样,我只能以某种方式获得当天匹配的行。就我而言,当天发生的或前几天发生的任何事件。问题是,例如,前一天从晚上 10:00 到凌晨 12:00 (2012-9-3) 发生事件的情况在第二天 (2012-9-4) 出现。所以我需要防止这种情况发生。

这是我遇到麻烦的地方。我不知道如何正确完成它。我尝试过不同的事情,但都失败了。我需要一种方法来使 where 子句中的语句仅在end date > start dateend date == current dayend time == 00:00. 任何建议将不胜感激!

4

2 回答 2

1

难道你只需要把 where 子句的第一部分转过来吗?

Where start_date >= date ('2012-9-4') and end_date <= date('2012-9-4')

假设您的数据的 end_date 总是晚于 start_date (如果不是,则添加一个 OR 和相反的值来获取它们)。

如果(从 Q 中混淆)您实际上想要相交的日期(重叠),那么您需要两个相交的子句:

where (start_date >= date('2012-09-03 00:00:00') and start_date < date('2012-09-04 00:00:00')) or (end_date >= date('2012-09-03 00:00:00') and end_date < date('2012-09-04 00:00:00'))
于 2012-09-13T02:33:22.033 回答
0

我终于想通了(很确定)!

SELECT * FROM events WHERE date('2012-9-4') >= start_date AND 
date('2012-9-5') <= end_date AND datetime(end_date,end_time) != datetime(2012-9-5,'00:00')

经过 2 天的思考,我不知道为什么我从来没有想过要使用这些时间。我想我需要更多的数据库练习。无论如何,我添加的部分过滤了按日期和时间列出的事件。示例就像我的查询日期,假设 4 日晚上 11:00 到 5 日上午 12:00。本质上说“AND datetime(end_date,end_time) != datetime(2012-9-5,'00:00')仅当它不是午夜的结束日期时才输出。” 它只会过滤掉第 5 天而不是第 4 天,因为从技术上讲,午夜是另一天。这是我想要过滤掉事件的唯一情况,而不仅仅是在事件期间之间。我感谢 Wolf5370 提供的帮助。

于 2012-09-13T04:36:47.560 回答