0

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

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

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

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

这显然会通过报告管理器 (SSRS) 每天运行。有任何想法吗?

谢谢。

4

2 回答 2

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)
于 2012-08-02T18:01:40.243 回答
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()为您想要开始/结束的任何日期。

于 2012-08-02T17:58:28.280 回答