朋友,我知道我的问题很基本,但由于我对SQL天真,所以对此深信不疑。 我有一个名为TRANS_MONT的表,并存储如下数据
Year month amount
2017 10 500
2017 11 700
2017 12 400
2018 1 600
2018 2 450
2018 3 600
我有兴趣退回2017年以来月份值大于10的所有交易以及2018年以来月份值小于3的所有交易 我在下面的查询中尝试过,但不起作用
Select * from TRANS_MONT where year in (2017, 2018) and month between 10 and 3
答案 0 :(得分:1)
尝试以下
Select * from TRANS_MONT where (year=2017 and month>=10) OR (year=2018 and month<=3)
答案 1 :(得分:1)
如果SQL仅存储为整数,则SQL不会采用几个月的模块化算法。
给出的实际上是两个逻辑语句,用OR
分开以捕获这两年的两种情况。即使可以使用月份范围,例如从技术上讲,它也可以在2018年达到第12个月。
SELECT * FROM TRANS_MONT
WHERE (Year = 2017 AND month > 10) OR (Year = 2018 AND month < 3)
答案 2 :(得分:1)
这很简单:
SELECT *
FROM trans_mont
WHERE (year = 2017 AND month > 10)
OR (year = 2018 AND month < 3);
答案 3 :(得分:1)
最简单的是这样的:
select * from Trans_Mont
where (year=2017 and Month>10)
or (year=2018 and Month<3)
或
select * from Trans_Mont
where (year * 100 + Month) BETWEEN 201710 and 201803
答案 4 :(得分:1)
您没有声明您的DBMS,但是使用标准SQL,您可以执行以下操作
select *
from trans_mont
where (year, month) between (2017,11) and (2018,2);
between
运算符包括边,这就是为什么低端的月份为11(而不是10)而高端的月份为2