0

我的 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 行。见附件截图: 在此处输入图像描述

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

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

我确实得到了 3 个结果。见附件截图: 在此处输入图像描述

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

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

4

2 回答 2

1

如果您通过单独运行不同的 where 子句获得结果并不能保证AND2 个where子句将返回答案。必须有行的交集才能得到结果 while AND。您应该验证您的数据并查看是否存在重叠

于 2013-06-10T16:01:47.947 回答
1

BETWEEN我可以通过不使用 SQL运算符而是使用COMPARISONOPERATORS来使其工作,例如:>= || <=

我从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!

这就是我面临的问题中发生的事情。第一个字段被视为测试值的一部分,第二个字段被排除在外。使用比较运算符给出准确的结果。

于 2013-06-11T03:45:28.377 回答