SQL WHERE子句标准

时间:2016-11-11 20:16:37

标签: mysql sql where-clause

有一个星期五的时刻...尝试编写MySQL标准如下:

两个日期之间的时间戳 此外,如果field2为a或b

,则时间戳不大于23:59

类似的东西:

(`timestamp` BETWEEN @StartDate And @EndDate) AND NOT ((`timestamp`>='23:59') AND (`Field2` NOT IN ('a','b')))

对我来说这看起来有些偏差,并且在我的编辑器中显示错误字符,所以我试图确定这个表单是否错误,或者我是否错误地将括号括起来了。我实际上是在时间戳字段上执行一些计算,但为了简单起见省略了这些计算。

任何见解都表示赞赏!

1 个答案:

答案 0 :(得分:2)

除了试图避免OR用于索引目的之外,还有什么问题吗?

... AND (f2 NOT IN ('a', 'b') OR ts <= '23:59')

Edit1:(如果我记得我的布尔逻辑转换正确)它相当于:

... AND NOT (f2 IN ('a', 'b') AND ts > '23:59')

Edit2:或者,从另一个角度来看,第一个版本可以扩展到:

... AND (f2 NOT IN ('a', 'b') OR (f2 IN ('a', 'b') AND ts <= '23:59'))