我需要在设置的日期和月份之后检索所有记录,但年份可变。 IE:我需要检索10月1日之后的所有记录,并向后追溯3年。
更好的例子:在2019年,我需要检索自2016年1月10日以来的所有记录。在2020年,我将需要检索2017年10月1日以来的所有记录。
我可以对日期进行硬编码,但我希望但不必每年更新代码。
我一直在为WHERE子句执行此操作,但是它显然不会像2016年10月1日之前那样过滤掉记录,就像我需要它: 日期> DATEADD(年,-3,GETDATE());
答案 0 :(得分:1)
假设版本为2012或更高版本,则可以使用datefromparts
:
SELECT ...
FROM TableName
WHERE DateColumn >= DATEFROMPARTS(YEAR(GETDATE())-3, 10, 1);
对于较旧的版本,您可以手动建立日期:
SELECT ...
FROM TableName
WHERE DateColumn >= CAST((CAST(YEAR(GETDATE())-3 as char(4)) + '-10-01') as date);
答案 1 :(得分:0)
假设您要在给定年份中的任何日期从3年前开始到10月(因此,对于2019年1月1日和2019年12月31日,您都想要2016年10月1日),则可以执行以下操作:
SELECT ...
FROM ...
WHERE YourDateColumn >= DATEFROMPARTS(DATEPART(YEAR, GETDATE())-3,10,1)
AND YourDateColumn <= GETDATE()
...