如何编写SQL查询regd表中2017年8月至2018年3月的人员数据
查询2017年8月至2018年3月人员的SQL方案
嗨,我来帮你搞定这个查询需求!针对你的regd表结构,这里有两种实用的查询方法,你可以根据自己的数据库类型和性能需求选择:
方法1:直接通过年份和月份字段判断(性能优先)
这种写法不需要转换字段类型,能直接利用year和month字段的索引(如果有的话),适合数据量较大的场景:
SELECT name FROM regd WHERE (year = 2017 AND month >= 8) OR (year = 2018 AND month <= 3);
逻辑很清晰:筛选出2017年8月及以后的记录,加上2018年3月及以前的记录,两者的并集就是你要的时间段数据。
方法2:转换为日期类型后使用范围查询(可读性优先)
如果觉得分段判断不够直观,可以把year和month拼接成日期,再用BETWEEN来筛选范围。不过要注意不同数据库的日期转换函数略有差异:
MySQL版本
SELECT name FROM regd WHERE STR_TO_DATE(CONCAT(year, '-', month, '-01'), '%Y-%m-%d') BETWEEN '2017-08-01' AND '2018-03-01';
PostgreSQL版本
SELECT name FROM regd WHERE TO_DATE(CONCAT(year, '-', month), 'YYYY-MM') BETWEEN '2017-08-01' AND '2018-03-01';
SQL Server版本
SELECT name FROM regd WHERE CAST(CONCAT(year, '-', month, '-01') AS DATE) BETWEEN '2017-08-01' AND '2018-03-01';
这种写法把年份和月份转换成具体的日期(这里统一用每月1号),然后直接判断是否在目标日期范围内,可读性更强,但如果数据量很大,可能会因为函数转换无法使用索引,性能略逊于第一种方法。
内容的提问来源于stack exchange,提问作者sanu
相关产品推荐
相关产品推荐

