我在弄清楚这一点时遇到了问题。这是我的问题:
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 date、end date == current day和end time == 00:00时运行。任何建议都是非常受欢迎的!!
发布于 2012-09-13 10:33:22
您不是只需要修改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-13 12:36:48
我终于弄明白了(非常确定)!
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')经过两天的思考,我不知道为什么我从来没有想过要利用时间。我想我需要更多的数据库实践。在任何情况下,我添加的部分都会过滤按日期和时间列出的事件。例如,我的查询日期是4号晚上11:00到5号凌晨12:00。AND datetime(end_date,end_time) != datetime(2012-9-5,'00:00')实质上是说“只有在午夜时间不是结束日期时才输出”。它只会过滤掉5号,而不是4号,因为从技术上讲,午夜是另一天。这是我唯一想要过滤掉事件的情况,而不仅仅是在事件周期之间。我感谢Wolf5370的提示,这对我很有帮助。
https://stackoverflow.com/questions/12398534
复制相似问题