我在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)
出什么问题了,因为此查询没有结果。
答案 0 :(得分:0)
似乎有两个问题:
尝试以下操作:
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()))