我有一个四列的SQL表。我试图在过去的一年和一个月之间得到行。以下查询返回零行。这是正确的,还是应该使用BETWEEN。列数据类型为NUMBER AND而不是DATE。以下查询返回零条记录。
select count( *) from TABLEA where refyear= 2020 AND refmonth in (1,2,3,4,5) AND
refyear= 2019 AND refmonth in (1,2,3,4,5,6,7,8)
TABLEA
YEAR MONTH USERID NAME
2020 1 1 ABC
2020 2 1 ABC
2020 3 1 ABC
2020 4 1 ABC
2020 5 1 ABC2020
2019 1 1 ABC
2019 2 1 ABC
2019 3 1 ABC
2019 4 1 ABC
2019 5 1 ABC
2019 6 1 ABC
2019 7 1 ABC
2019 8 1 ABC
3条答案
按热度按时间gg58donl1#
我认为正常的情况是:
但我还是不确定这是不是你真正想要的。按照你写逻辑条件的方式,没有行是正常的,因为你可能不会同时有refyear = 2020和refyear= 2019。
zzlelutf2#
您的查询不正确,因为您试图获取同时具有
refyear
值的行,因为2019
和2020
是不可能的,这就是为什么您没有得到任何行。如果你想得到一个或另一个,那么你需要使用OR
而不是AND
。如果您试图获取2019年8月至2020年5月之间的所有行,则:
OR ( 2019 < refyear AND refyear < 2020 )
永远不会为真,因此可以省略该行,但在开始和结束年份不连续的一般情况下,则需要它。如果你想要列出所有的年份和月份(而不是连续的范围),那么你可以使用一个带有多个值的
IN
子句:或者你可以使用你的查询,用
OR
替换AND
:AND
和OR
运算符的优先级。*5ssjco0h3#
如果你想在一个查询结果中有多个选择的结果,你可以尝试这样做: