如何基于当前日期计算3年前对应年份的年初首日(1月1日)
SQL 3年前年初日期筛选条件实现
核心逻辑为:先计算当前日期减3年的结果,再将该日期截断为对应年份的1月1日即可,以下为不同数据库环境的可用写法,所有写法均避免对筛选字段做函数运算,可正常命中日期类型索引,查询效率更高:
SQL Server 环境(2012及以上版本,可读性最高)
WHERE datefield >= DATEFROMPARTS(YEAR(DATEADD(YEAR, -3, GETDATE())), 1, 1)若使用不支持
DATEFROMPARTS的老版本SQL Server,可改用兼容写法:WHERE datefield >= DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, -3, GETDATE())), 0)MySQL 环境
WHERE datefield >= MAKEDATE(YEAR(CURRENT_DATE) - 3, 1)PostgreSQL 环境
WHERE datefield >= date_trunc('year', current_date - interval '3 years')Oracle 环境
WHERE datefield >= TRUNC(ADD_MONTHS(SYSDATE, -36), 'YEAR')
内容的提问来源于stack exchange,提问作者Pushpin29
相关产品推荐
相关产品推荐

