如何获得今天和 2 周之间的日期结果

How do I get a date result between today and 2 weeks

我在 SQL 服务器中有一个 DATE 列,其中包含示例:

1978-03-22  
1984-04-01
1991-12-22
1986-03-31

现在我想要从今天到 14 天的所有结果。所以条目

1978-03-22
1984-04-01
1986-03-31

应该显示。

我的SELECT声明如下:

SELECT date_column FROM table WHERE CONVERT(varchar(7),date_column,100) BETWEEN CONVERT(varchar(7),DATEADD(DAY,-1,GETDATE()),100) AND CONVERT(varchar(7),DATEADD(DAY,14,GETDATE()),100)

怎么了,因为我从这个查询中没有得到任何结果。

似乎有两个问题:

  • 如果您将当前日期与当前日期后的 14 天进行比较,则不会 return 任何结果,因为 table 数据的 'Year' 为 1978 年、1984 年, 1986 和 1991.
  • 比较日期时,请使用由数字组成的格式(varchar 比较可能无法给出正确的结果)。

尝试以下操作:

SELECT date_column
FROM @tab
WHERE CONVERT(varchar(7),date_column,112) BETWEEN CONVERT(varchar(7),DATEADD(DAY,-1,GETDATE()),112) AND CONVERT(varchar(7),DATEADD(DAY,14,GETDATE()),112)

创建一个吞吐量,使您的日期达到当年。然后检查距离修改日期的天数。

select      date_column,
            distance
from        @table t
cross apply (select 
                anniversary = dateadd(year, year(getdate()) - year(date_column), date_column),
                yesterday = dateadd(day, -1, convert(date,getdate()))
             ) ap1
cross apply  (select distance = datediff(day, yesterday, anniversary)) ap2
where        ap2.distance between 0 and 14;

顺便说一下,您提到您想要从今天到两周内使用它,但您的查询中有一个 -1 dateadd 运算符。所以我从 'yesterday' 到从今天开始的两周内写了我的代码,当然你可以根据自己的需要进行调整。

看来,您只想检查月份和日期。下一条语句是一个可能的解决方案,(请注意您需要 SQL Server 2012+ 才能实现 DATEFROMPARTS() 功能):

SELECT * 
FROM Data 
WHERE DATEFROMPARTS(YEAR(GETDATE()), MONTH(date_column), DAY(date_column)) 
   BETWEEN CONVERT(date, GETDATE()) AND CONVERT(date, DATEADD(day, 14, GETDATE()))