2016-11-11 157 views
0

有一个周五的时刻,试着写MySQL的标准如下:SQL WHERE子句条件

两个日期之间 一个时间戳此外,时间戳不超过23:59较大,如果场2为A或B

喜欢的东西:

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

这看起来有点假给我,并呈现出在我的编辑错误的性格,所以我想,以确定这种形式是错误的,或者如果我算错圆括号。实际上,我在时间戳字段上执行了一些计算,但为了简单起见,我们忽略了这些计算。

感谢您的任何见解!

+0

从not in('a','b')中删除'not'也timestamp> = string 23:59?一天有多少个小时?所以你排除了最后的59.9999秒? – xQbert

+0

不错。实际上,我故意排除了最后59秒,这就是为什么我必须将字段a和b分开 - 在切换前的最后一分钟,提供数据的系统不可靠。 – Jake

+0

然后,我只是认为,根据我的理解,这不是唯一的错误。 – xQbert

回答

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'))

+0

我需要排除a或b值大于23:59的记录。 a或b值可能先前存在,我需要这些值。 – Jake

+0

它应该工作;它包括所有非“a或b”和任何东西(包括ts <= 23:59的“a或b”)。 _see编辑更多解释_ – Uueerdo

+0

编辑1工作;谢谢! – Jake