如何使用SQL Server与当前周进行比较?

时间:2010-01-14 11:41:28

标签: sql sql-server tsql

如何将SQL Server日期列与当前周比较?

例如:

WHERE [Order].SubmittedDate = *THIS WEEK*

3 个答案:

答案 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