如何从SQL日期类型字段中筛选出指定年份(如2021年)的对应数据
SQL筛选2021年日期数据方案
首先明确前提:你的字段是原生日期类型,你看到的31-oct-2020只是数据库客户端的展示格式,底层存储为标准日期结构,不需要做字符串解析处理。
优先推荐使用日期范围匹配的写法,该写法可以命中日期字段上的索引,大表查询性能远高于对字段做函数计算后筛选的写法。
全数据库通用写法
适用MySQL、PostgreSQL、Oracle、SQL Server等绝大多数主流数据库,性能最优:
SELECT * FROM 替换为你的表名 WHERE 替换为你的日期字段名 >= '2021-01-01' AND 替换为你的日期字段名 < '2022-01-01';
如果你的日期字段带时分秒,该写法也可以完整覆盖2021年1月1日00:00:00到2021年12月31日23:59:59的所有数据,不会出现边界遗漏。
各数据库简化写法
如果你对查询性能要求不高,或者表数据量很小,可以用更直观的年份提取写法:
- MySQL/PostgreSQL
SELECT * FROM 替换为你的表名 WHERE YEAR(替换为你的日期字段名) = 2021;
- Oracle
SELECT * FROM 替换为你的表名 WHERE EXTRACT(YEAR FROM 替换为你的日期字段名) = 2021;
- SQL Server
SELECT * FROM 替换为你的表名 WHERE DATEPART(YEAR, 替换为你的日期字段名) = 2021;
内容的提问来源于stack exchange,提问作者Eddie14
相关产品推荐
相关产品推荐

