SQL Server:查找即将到来的日期

时间:2012-08-02 17:50:02

标签: sql-server reporting-services

我有一个带有Date列的SQL Server数据库。这些日期都是未来的日期。

我如何在2周的时间内找到所有接近的日期?基本上是关于即将到来的日期的两周通知查询。

例如:今天是8月2日。查询将返回8月16日(提前2周)的日期(如果有)。

如果它明天开始运行,它将在8月16日和8月17日(提前2周)返回。

这显然可以通过报告管理员(SSRS)每天运行。有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用DATEADD

SELECT *
FROM MyTable
WHERE MyDateField BETWEEN GETDATE() AND DATEADD(week, 2, GETDATE())

如果您的专栏是datetime,您可能希望先将其转换为日期,否则在8月1日的12:00运行会将所有内容返回到8月15日的12:00。以下代码将为您执行此操作:

SELECT *
FROM MyTable
WHERE CAST(MyDateField AS date) BETWEEN CAST(GETDATE() AS date) AND CAST(DATEADD(week, 2, GETDATE()) AS date)

答案 1 :(得分:0)

SELECT * FROM mytable WHERE dateCol BETWEEN DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) AND 
    DATEADD(s, -1, DATEADD(d, 1, DATEADD(d, DATEDIFF(d, 0, DATEADD(wk, 2, GETDATE())), 0)))

这将在今天的开始和2个星期的结束之间返回任何内容。

如果您尝试从今天起2周内返回任何记录(00:00:00> 23:59:59),请使用

SELECT * FROM mytable WHERE dateCol BETWEEN DATEADD(dd, 0, DATEDIFF(dd, 0, DATEADD(wk, 2, GETDATE()))) AND 
    DATEADD(s, -1, DATEADD(d, 1, DATEADD(d, DATEDIFF(d, 0, DATEADD(wk, 2, GETDATE())), 0)))

您可以将GETDATE()替换为您想要开始/结束的日期。