2014-09-03 1 views
0

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

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

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

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

+0

Какие СУБД вы используете? – Andrew

+0

Microsoft SQL Server – NRud

ответ

0

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

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

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