有一个星期五的时刻...尝试编写MySQL标准如下:
两个日期之间的时间戳 此外,如果field2为a或b
,则时间戳不大于23:59类似的东西:
(`timestamp` BETWEEN @StartDate And @EndDate) AND NOT ((`timestamp`>='23:59') AND (`Field2` NOT IN ('a','b')))
对我来说这看起来有些偏差,并且在我的编辑器中显示错误字符,所以我试图确定这个表单是否错误,或者我是否错误地将括号括起来了。我实际上是在时间戳字段上执行一些计算,但为了简单起见省略了这些计算。
任何见解都表示赞赏!
答案 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'))