使用其他条件时SQL IN运算符不工作

时间:2013-05-20 19:55:31

标签: php mysql sql

SELECT * FROM schedule_backup WHERE shift_id IN (2, 7, 9) AND date BETWEEN '2013-05-22' AND '2013-05-22'

以上查询无效,显示空行选择

但下面的内容正在发挥作用

SELECT * FROM schedule_backup WHERE shift_id IN (2, 7, 9)

3 个答案:

答案 0 :(得分:3)

BETWEEN '2013-05-22' AND '2013-05-22'

如果您有datetime列,则转换为

BETWEEN '2013-05-22 00:00:00' AND '2013-05-22 00:00:00'

我想你想要

BETWEEN '2013-05-22' AND '2013-05-23'

...假设您确实拥有日期为2013-05-22且只需要一天的记录。

答案 1 :(得分:1)

就个人而言,我喜欢使用datediff函数:

SELECT * FROM schedule_backup WHERE shift_id IN (2, 7, 9) AND
DATEDIFF(date,'1/1/2013') = 0

对于你正在做的事情来说,它更加明显,并且你不会在一天结束时意外地吸引另一天或排除记录,因为between运营商会这样做。

另一种选择是简单地转换到日期:

CAST(dateField AS date)

编辑:修改为MySQL语法。

答案 2 :(得分:0)

BETWEEN '2013-05-22' AND '2013-05-22' - 这就像获取0到0之间的数字一样。如果是同一天,请将其更改为两个不同的日期或两个不同的日期。