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
бит с параметром, основанным на том, что фактический желаемый день.