我试图将表中的结果限制在与日期不重叠的记录中。正如你在下面的截图中看到的,我试图添加一个子句来过滤掉等于“结束”列的记录。查看该查询的最后一行。为什么这个“where”子句不会限制sql结果
我不明白为什么结果仍然显示屏幕截图中的记录。有人可以帮我解释吗?这可能是一个语法的东西?
谢谢!
我试图将表中的结果限制在与日期不重叠的记录中。正如你在下面的截图中看到的,我试图添加一个子句来过滤掉等于“结束”列的记录。查看该查询的最后一行。为什么这个“where”子句不会限制sql结果
我不明白为什么结果仍然显示屏幕截图中的记录。有人可以帮我解释吗?这可能是一个语法的东西?
谢谢!
您主要有:
a OR b AND c AND d AND e AND f
...你可能想:
(a OR b) AND c AND d AND e AND f
谢谢,就是这样。使总体感觉! – Jorre
AND
具有更高的operator precedence比OR
有。
这意味着,你AND
条款将被首先解释,以便在年底有类似
where (...) or (... and ... and ...)
由于OR
(('2014-01-14 18:30:00' between start and end)
)之前,满足第一个条件,你的行显示了。将OR
条款的双方置于禁忌之列,并且应该按照您的要求工作。
问题是您的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))
由于2014-01-14 18:30
是其为TRUE条件2014-01-14 16:00
和2014-01-14 18:30
之间。并且[(TRUE)或(其他)]也是TRUE
提示:在唯一无用的地方使用括号。 –
代码作为图像不是很有用 – niyou