如何结合int类型年、月两列使用BETWEEN进行日期范围筛选?
正确结合year和month字段使用BETWEEN筛选的方法
你的问题出在year+month的写法上——这是把两个整数相加,而不是拼接成你想要的YYYYMM格式。比如2018年2月,2018+2=2020,完全不是你期望的201802,所以筛选逻辑自然出错了。
这里给你两种靠谱的解决方案:
方法1:计算成YYYYMM数值(通用型)
把年份乘以100再加上月份,就能得到标准的YYYYMM格式的整数,之后就可以正常用BETWEEN了:
SELECT * FROM table WHERE (year * 100 + month) BETWEEN 201802 AND 202103;
括号是可选的,但加上能让逻辑更清晰,避免运算符优先级的潜在问题。
方法2:转换为日期类型(更直观)
如果你的数据库支持日期构造函数,可以把year和month转换成具体的日期(比如每月1号),再用日期范围筛选。这种方式更符合日期操作的逻辑,也方便后续扩展日期相关的查询:
- SQL Server:
SELECT * FROM table WHERE DATEFROMPARTS(year, month, 1) BETWEEN '2018-02-01' AND '2021-03-01'; - MySQL:
SELECT * FROM table WHERE MAKEDATE(year, month) BETWEEN '2018-02-01' AND '2021-03-01'; - Oracle:
SELECT * FROM table WHERE TO_DATE(year || '-' || month || '-01', 'YYYY-MM-DD') BETWEEN DATE '2018-02-01' AND DATE '2021-03-01';
两种方法都能实现你的需求,选哪种取决于你的数据库类型和后续查询的需求~
内容的提问来源于stack exchange,提问作者Maths12
相关产品推荐
相关产品推荐

