Создать две даты (вчера и сегодня)
Необходимо создать две даты, с учетом рабочих дней. Скажем, шесть рабочих дней.
Сегодня и вчера, но если вчера воскресенье, то суббота (вчерашний рабочий день)
Я создала некий запрос:
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 для операций с датами
