如何在SQL中的两个值之间返回记录

时间:2018-10-19 07:27:00

标签: sql oracle

朋友,我知道我的问题很基本,但由于我对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

5 个答案:

答案 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

在线示例:https://rextester.com/VZPQ64850