SQL Server 2012中如何提取指定日期早一年的记录?
解决SQL Server中筛选指定日期早一年记录的问题
嘿,我来帮你搞定这个需求!你之前的语句范围太大,是因为ERSEFFDT < '2017-01-01'会把所有2017年1月1日之前的记录都捞出来,包括2016年之前的,显然不符合你要的“恰好早一年”的要求。下面分两种常见需求给你对应的解决方案:
需求1:找正好是2017/01/01往前推一年当天的记录(即2016/01/01)
直接用DATEADD函数计算目标日期,然后精确匹配:
SELECT * FROM #participants_temp WHERE ERSEFFDT = DATEADD(year, -1, '2017-01-01') AND ERSEFFDT <> '0000-00-00'; -- 排除无效的零日期
需求2:找年份恰好比2017年早一年的所有记录(即2016年全年的记录)
如果你的需求是要2016年的所有数据,用YEAR()函数提取年份后筛选:
SELECT * FROM #participants_temp WHERE YEAR(ERSEFFDT) = YEAR('2017-01-01') - 1 AND ERSEFFDT <> '0000-00-00';
额外提示
在SQL Server里,尽量使用'YYYY-MM-DD'这种ISO标准日期格式,避免因为服务器的语言/区域设置不同导致日期解析出错哦。
内容的提问来源于stack exchange,提问作者mannj2018
相关产品推荐
相关产品推荐

