SQL WHERE 子句标准

SQL WHERE Clause Criteria

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

两个日期之间的时间戳 此外,时间戳不大于 23:59 如果 field2 是 a 或 b

类似于:

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

我觉得这有点不对劲,而且在我的编辑器中显示了错误字符,所以我想确定这个表格是否有误,或者我是否在某处算错了括号。我实际上是在对时间戳字段执行一些计算,但为了简单起见省略了这些计算。

如有任何见解,我们将不胜感激!

除了试图避免 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'))