1

我有一张这样的桌子:

ID  month    year   content
1     4      2013    xxxxx
2     5      2013    yyyyy
3     6      2013    zzzzz
4     8      2014    fffff

我想根据年份和月份范围查询它。

我有这样的查询:

SELECT * FROM UPP 
WHERE ( month = '4' AND year = '2013' )
  AND ( month = '6' AND year = '2013' ) 

该查询运行但不返回任何结果。谁能帮我解决这个查询?

注意:月份和年份列是整数。

4

2 回答 2

3

为什么不使用正确的数据类型?

做不到这一点:

SELECT * FROM UPP WHERE (year=2013) AND (month BETWEEN 4 AND 6);

将是获得此特定答案的最简单途径。

编辑

SQL Fiddle供参考。

于 2013-05-07T02:36:34.767 回答
0

永远不会有任何同时month=4 和month=6 的行,这是您的查询所要求的。添加这样的括号不会改变 AND 行为,因为您似乎希望它们如此,所以您要求WHERE year=2013 AND month=4 AND month=6.

您可以通过多种方式询问您似乎想要的东西,例如:

WHERE (year=2013 AND month=4) OR (year=2013 AND month=6)

或者

WHERE year=2013 AND (month=4 OR month=6)

或者

WHERE year=2013 AND month IN (4,6)

如果您想要完整的范围(整个季度,第 4、5 和 6 个月,而不仅仅是第 4 和第 6 个月,那么 swasheck 的建议可能是最明确的方法,但如果日期范围跨越年份之间的边界,这将会下降。如果您需要进行完全灵活的范围查询(“到 2013 年 2 月的六个月”等等),那么您可能需要重新考虑表结构以更轻松/有效地支持它。

于 2013-05-07T12:17:49.483 回答