Как сравнить с текущей неделей, используя SQL Server? - PullRequest
3 голосов
/ 14 января 2010

Как сравнить столбец даты SQL Server с текущей неделей?

Например:

WHERE [Order].SubmittedDate = *THIS WEEK*

Ответы [ 3 ]

7 голосов
/ 14 января 2010

Вы можете преобразовать свою дату в номер недели и сравнить его с номером недели от текущей даты. Точно так же вам нужно сравнить год, чтобы не получить прошлогодние недели.

WHERE DATEPART(wk, [Order].SubmittedDate) = DATEPART(wk, GETDATE())
AND DATEPART(yy, [Order].SubmittedDate) = DATEPART(yy, GETDATE())
1 голос
/ 14 января 2010

Предполагая, что вы всегда имеете в виду «эта неделя», и в будущем нет записей с «Отправленными датами», что, я думаю, могло бы быть причиной, которую вы можете сделать:

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)

Я бы настоятельно рекомендовал использовать предложение, основанное на начальной и конечной дате, как это, поскольку это позволит эффективно использовать индекс, поэтому должно работать лучше.

0 голосов
/ 14 января 2010

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...