SQL - гибко определяйте последний день предыдущей недели

Я пытаюсь создать гибкий способ определения последнего дня предыдущей недели, зная, что он будет работать в разных средах с разными неделями планирования (некоторые клиенты используют сб-пт; вс-сб; пн-вс). Я планировал создать переменную для использования в качестве начального дня каждого клиента (см. Ниже)

    Set @BeginningWeek = 1   -- 1=Mon; 2=Tues; 3=Wed; 4=Thurs; 5=Fri; 6=Sat; 7=Sun

Я пытался использовать комбинацию dateadd и datepart, а также указанную выше переменную, чтобы попытаться получить предыдущий последний день недели, но у меня возникли проблемы с логикой. Я не хочу использовать Set DateFirst, эти сценарии будут выполняться в среде клиента, поэтому я не хочу ничего менять в их БД.

Предполагая, что сценарий запускается в среду (9/3); и неделя планирования клиента - суббота; Я хотел бы установить другую переменную @EndDate = предыдущая пятница (8/29). Мне нужна гибкость, чтобы использовать тот же сценарий (изменяя только значение @BeginningWeek) с другим клиентом, чья неделя планирования - понедельник-воскресенье, и установить @EndDate = предыдущее воскресенье (8/31).

1 ответ

Это даст вам предыдущую субботу.

SELECT DATEADD(day,
               -1 - (DATEPART(dw, GETDATE()) + @@DATEFIRST - 2) % 6,
               GETDATE()
       ) 

Вы должны быть в состоянии заменить %6 бит с параметром, основанным на том, что фактический желаемый день.

Другие вопросы по тегам