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