即使值存在,SQL BETWEEN也会返回空行

时间:2013-06-10 15:58:17

标签: sql between

我的SQL查询出错了什么?即使存在值,它也总是返回空行。

这是我的问题:

SELECT * 
FROM   users 
WHERE  user_theme_id IN ( 9735, 9325, 4128 ) 
       AND ( user_date_created BETWEEN '2013-06-04' AND '2013-06-10' );

我试图逐个剪切原始查询,得到了结果。这是第一个:

SELECT * FROM users WHERE user_theme_id IN (9735, 9325, 4128 );

这个结果我有3行。查看附件快照: enter image description here

现在,我运行的下一个查询是:

SELECT * 
FROM   users 
WHERE  user_date_created BETWEEN '2013-06-04' AND '2013-06-10'; 

我确实得到了3个结果。查看附件快照: enter image description here

顺便说一句,这个使用BETWEEN的sql应该假设返回4行但它只返回3.它不会返回创建日期为2013-06-10 08:27:43的数据

我的原始查询出错了为什么它总是返回一个空行?

2 个答案:

答案 0 :(得分:1)

如果您通过单独运行不同的where子句获得结果,则不保证AND 2 where条款返回答案。 在AND时,必须有交集行才能获得结果。 您应验证您的数据,并查看重叠是否存在。

答案 1 :(得分:0)

我能够通过不使用SQL BETWEEN运算符而不是COMPARISON运算符来使其工作:>= || <=

我是从 W3schools.com 读取的,之间的SQL可以在不同的数据库中产生不同的结果。

这是内容:

Notice that the BETWEEN operator can produce different result in different databases!
In some databases, BETWEEN selects fields that are between and excluding the test values.
In other databases, BETWEEN selects fields that are between and including the test values.
And in other databases, BETWEEN selects fields between the test values, including the first test value and excluding the last test value.

Therefore: Check how your database treats the BETWEEN operator!

这就是我所面临的问题。第一个字段被视为测试值的一部分,第二个字段被排除在外。使用比较运算符可以得到准确的结果。