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

时间:2020-03-22 15:16:15

标签: sql-server ssms

我在SQL Server中有一个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)

出什么问题了,因为此查询没有结果。

3 个答案:

答案 0 :(得分:0)

似乎有两个问题:

  • 如果要与当前日期和从当前日期算起的14天进行比较,则它将不会返回任何结果,因为表数据的“年份”分别为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)

答案 1 :(得分:0)

创建一个吞吐量,使您的日期截止到当前年份。然后检查从修改日期算起的天数。

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运算符。因此,我从“昨天”到今天的两个星期都编写了代码,但是当然您可以根据自己的需要进行调整。

答案 2 :(得分:0)

似乎您只想检查几个月和几天。下一条语句是一个可能的解决方案,(请注意,您需要使用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()))   
相关问题