如何从设定的日期和月份(但年份可变)中检索所有记录?

时间:2019-04-17 13:25:03

标签: sql sql-server tsql

我需要在设置的日期和月份之后检索所有记录,但年份可变。 IE:我需要检索10月1日之后的所有记录,并向后追溯3年。

更好的例子:在2019年,我需要检索自2016年1月10日以来的所有记录。在2020年,我将需要检索2017年10月1日以来的所有记录。

我可以对日期进行硬编码,但我希望但不必每年更新代码。

我一直在为WHERE子句执行此操作,但是它显然不会像2016年10月1日之前那样过滤掉记录,就像我需要它: 日期> DATEADD(年,-3,GETDATE());

2 个答案:

答案 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()
  ...
相关问题