Как получить данные текущей недели только на SQL-сервере?

Я хочу, чтобы записи из таблицы сохраняли текущую дату, когда запись была вставлена ​​только на текущей неделе.

Я пробовал:

SELECT PId 
,WorkDate 
,Hours          
,EmpId            
FROM Acb       
WHERE [email protected] AND WorkDate BETWEEN DATEADD(DAY, -7, GETDATE()) AND GETDATE()

Ответы

Ответ 1

Сделайте это так:

SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT [...]
AND WorkDate >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
AND WorkDate <  dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate()))

Пояснение:

  • datepart(dw, getdate()) вернет номер дня на текущей неделе, от 1 до 7, начиная с того, что вы указали с помощью SET DATEFIRST.
  • dateadd(day, 1-datepart(dw, getdate()), getdate()) вычитает необходимое количество дней, чтобы достигнуть начала текущей недели.
  • CONVERT(date,getdate()) используется для удаления временной части GETDATE(), поскольку вам нужны данные, начинающиеся в полночь.

Ответ 2

Лучший способ -

select datepart(ww, getdate()) as CurrentWeek

Вы также можете использовать wk вместо ww.

Документация о датах

Ответ 3

datepart(dw, getdate()) - текущий день недели, dateadd(day, 1-datepart(dw, getdate()), getdate()) должен быть первым днем ​​недели, добавить 7 к нему, чтобы получить последний день недели.

Ответ 4

Его работа для меня.

Select * From Acb Where WorkDate BETWEEN DATEADD(DAY, -7, GETDATE()) AND DATEADD(DAY, 1, GETDATE())

Вы должны поместить эту строку после пункта AND AND DATEADD(DAY, 1, GETDATE())

Ответ 5

Вы можете использовать следующий запрос для извлечения текущей недели:

select datepart(dw, getdate()) as CurrentWeek