如何获得今天和 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()))
我在 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()))