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'))
有一个星期五的时刻...尝试编写 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'))