Как получить данные текущей недели только на 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