我有一个带有Date
列的 SQL Server 数据库。这些日期都是未来的日期。
我将如何在 2 周的时间内找到所有临近的日期?基本上是关于即将到来的日期的两周通知查询。
例如:今天是 8 月 2 日。如果有的话,查询将返回 8 月 16 日(提前 2 周)的日期。
如果它明天运行,它将在 8 月 16 日和 8 月 17 日(提前 2 周)返回。
这显然会通过报告管理器 (SSRS) 每天运行。有任何想法吗?
谢谢。
我有一个带有Date
列的 SQL Server 数据库。这些日期都是未来的日期。
我将如何在 2 周的时间内找到所有临近的日期?基本上是关于即将到来的日期的两周通知查询。
例如:今天是 8 月 2 日。如果有的话,查询将返回 8 月 16 日(提前 2 周)的日期。
如果它明天运行,它将在 8 月 16 日和 8 月 17 日(提前 2 周)返回。
这显然会通过报告管理器 (SSRS) 每天运行。有任何想法吗?
谢谢。
您可以使用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)
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()
为您想要开始/结束的任何日期。