我正在尝试将表格中的结果限制为日期与我的数据不重叠的记录。正如您在下面的屏幕截图中看到的,我正在尝试添加一个子句来过滤掉等于“end”列的记录。请参阅查询中的最后一行。
我无法弄清楚为什么结果仍会显示截图中的记录。有人可以帮我解释一下吗?这可能是一种语法问题?
谢谢!
答案 0 :(得分:5)
你基本上有:
a OR b AND c AND d AND e AND f
......你可能想要:
(a OR b) AND c AND d AND e AND f
答案 1 :(得分:2)
AND
的{{3}}高于OR
。
这意味着您的AND
条款将首先被解释,以便最后有类似
where (...) or (... and ... and ...)
由于满足OR
(('2014-01-14 18:30:00' between start and end)
)之前的第一个条件,您的行就会显示出来。将OR
子句的两边放在parantheses中,它应该按照你想要的方式工作。
答案 2 :(得分:1)
问题是你的WHERE
子句的第一部分是传递该记录。我相信你需要更多的括号。
我不完全确定您使用所提供的数据尝试实现的目标,但是OR
关键字后面的左括号和最后一个结束括号应该这样做。
像这样:
where
('2014-01-14 18:30:00' between start and end)
or (('2014-01-14 19:30:00' between start and end)
and ('2014-01-14 18:30:00' != start)
and ('2014-01-14 19:30:00' != end)
and ('2014-01-14 19:30:00' != start)
and ('2014-01-14 18:30:00' != end))
答案 3 :(得分:1)
因为2014-01-14 18:30
介于2014-01-14 16:00
和2014-01-14 18:30
之间,这是 TRUE 条件。并且[(TRUE)或(其他任何)]也是 TRUE