Создать две даты (вчера и сегодня)

Необходимо создать две даты, с учетом рабочих дней. Скажем, шесть рабочих дней.

Сегодня и вчера, но если вчера воскресенье, то суббота (вчерашний рабочий день)

Я создала некий запрос:

DECLARE @DATESTART DATETIME = CAST(GETDATE() AS DATE)
IF DATEPART(WEEKDAY, @DATESTART) = 7 --ЕСЛИ ВОСКРЕСЕНЬЕ
BEGIN
SET @DATESTART = @DATESTART - 1
END
DECLARE @DATEEND DATETIME = @DATESTART - 1
IF DATEPART(WEEKDAY, @DATEEND) = 7 --ЕСЛИ ВОСКРЕСЕНЬЕ
BEGIN
SET @DATEEND = @DATEEND - 1
END

SELECT @DATESTART AS D1, @DATEEND AS D2

Результат:

Результат

Процедура, где я использую даты, ничего не возвращает. А когда я пишу вручную даты ('23/11/2023' и '22/11/2023'), то работает. Правильно ли я создала запрос?

Запрос сама писала по документации, и семь, насколько я поняла — это индекс воскресенья.


Ответы (1 шт):

Автор решения: RottenRat
DECLARE @DATESTART DATE = CAST(GETDATE() AS DATE)
IF DATEPART(WEEKDAY, @DATESTART) = 7 --ЕСЛИ ВОСКРЕСЕНЬЕ
BEGIN
    SET @DATESTART = DATEADD(day, -1, @DATESTART)
END
DECLARE @DATEEND DATE = DATEADD(day, -1, @DATESTART)
IF DATEPART(WEEKDAY, @DATEEND) = 7 --ЕСЛИ ВОСКРЕСЕНЬЕ
BEGIN
    SET @DATEEND = DATEADD(day, -1,@DATEEND) 
END

SELECT @DATESTART AS D1, @DATEEND AS D2

Объяснение:

При SET @DATEEND = @DATEEND - 1 вы точно уверены как неявно вычисляется ваше значение? Я - нет. Используйте DATEADD для операций с датами

→ Ссылка