如何将SQL Server日期列与当前周比较?
例如:
WHERE [Order].SubmittedDate = *THIS WEEK*
答案 0 :(得分:7)
您可以将日期转换为周数,并将其与当前日期的周数进行比较。同样,你也需要比较一年,这样你就不会得到去年的几周。
WHERE DATEPART(wk, [Order].SubmittedDate) = DATEPART(wk, GETDATE())
AND DATEPART(yy, [Order].SubmittedDate) = DATEPART(yy, GETDATE())
答案 1 :(得分:1)
假设您的意思总是“本周”,并且未来没有提交日期的记录,我想您可以这样做:
WHERE [Order].SubmittedDate >= DATEADD(dd, -(DATEPART(dw, GETDATE()) -1), GETDATE())
如果日期确实如此,本周的完整限制是:
WHERE [Order].SubmittedDate >= DATEADD(dd, -(DATEPART(dw, GETDATE()) -1), GETDATE())
AND [Order].SubmittedDate < CAST(CONVERT(VARCHAR(10), DATEADD(dd, (8 - DATEPART(dw, GETDATE())), GETDATE()), 120) AS DATETIME)
我强烈建议使用基于这样的开始和结束日期的子句,因为它将允许有效的索引使用,因此应该更好。
答案 2 :(得分:0)
试试这个:
WHERE [Order].SubmittedDate BETWEEN
DATEADD(d, - DATEPART(dw, GETDATE()) + 1, GETDATE()) AND
DATEADD(d, 7 - DATEPART(dw, GETDATE()) , GETDATE())
也许这可以更快地运行,因为不需要每次都进行评估:
DECLARE @StartDate DATETIME,
@EndDate DATETIME
SELECT @StartDate = DATEADD(d, - DATEPART(dw, GETDATE()) + 1, GETDATE()),
@EndDate = DATEADD(d, 8 - DATEPART(dw, GETDATE()) , GETDATE())
-- // Strip time part, so week starts on Sunday 00:00
SELECT @StartDate = CAST(FLOOR(CAST(@StartDate AS FLOAT)) AS DATETIME),
@EndDate = CAST(FLOOR(CAST(@EndDate AS FLOAT)) AS DATETIME)
...
WHERE [Order].SubmittedDate >= @StartDate AND [Order].SubmittedDate < @EndDate