我在解决这个问题时遇到了问题。这是我的问题:
SELECT * FROM events WHERE date('2012-9-4') >= start_date AND
date('2012-9-4') <= end_date
现在您可以从上面看到,我只是以某种方式获得与当天匹配的行。在我的情况下,当天发生的任何事件或前几天的事件。问题是,例如,前一天从晚上10点到凌晨12:00(2012-9-3)的事件出现在第二天(2012-9-4)。所以我需要保持这样的情况发生。
这是我遇到麻烦的地方。我不知道如何正确完成它。我尝试过不同的东西,但都失败了。我需要一种方法来在where子句中创建一个只在end date > start date
,end date == current day
和end time == 00:00
时运行的语句。任何建议都会非常感激!!
答案 0 :(得分:1)
难道你不需要转过where子句的第一部分
Where start_date >= date ('2012-9-4') and end_date <= date('2012-9-4')
假设你的数据总是比start_date晚了end_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'))
答案 1 :(得分: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点到第5点凌晨12:00。 AND datetime(end_date,end_time) != datetime(2012-9-5,'00:00')
基本上表示“只有当它不是结束日期时才会输出午夜时间”。它只会过滤掉5号而不是4号,因为午夜在技术上是另一天。这是我唯一想要过滤事件的唯一情况,而不仅仅是事件期间。我很欣赏Wolf5370提供的帮助。