T-SQL Получить первый день недели из числа - PullRequest
0 голосов
/ 10 мая 2018

У меня есть таблица, которую мы используем для нашего финансового года, которая не соответствует традиционному календарю. Я пытаюсь создать столбец, в котором будет храниться фактическая календарная дата SQL для первого дня недели с учетом номера недели.

Пример:

Fiscal Year     Fiscal Date     Fiscal Week     Calendar Date
2016            1/1/2016        1               1/1/2016
2016            1/2/2016        1               1/1/2016
2016            1/3/2016        1               1/1/2016
2016            1/4/2016        1               1/1/2016
2016            1/5/2016        1               1/1/2016
2016            1/6/2017        1               1/1/2016
2016            1/7/2017        1               1/1/2016
2016            1/8/2017        1               1/1/2016
2016            1/9/2017        2               1/4/2016

Я пытался использовать следующее, но я хочу предоставить обратное:

set datefirst 1;
select datepart(week, '2016-01-01');

Вместо того, чтобы:

set datefirst 1;
select datepart(week=1, What is the First Day of week 1)
select datepart(week=2, What is the First Day of week 2)

Я пытался использовать следующий код, найденный в другом потоке, но он не обеспечивает правильный первый день недели:

set datefirst 1;

Declare @week integer  = 2
Declare @Year Integer  = 2016
declare @date datetime


set @date = Dateadd(week, @week-1, DateAdd(day, 0, 
        DateAdd(month, 0, 
        DateAdd(Year, @Year-1900, 0))))

select @date startweek, DATEADD (D, -1 * DatePart (DW, @date) + 7, @date) endweek

Как указано в 1/8/2016 в качестве первого дня недели 2, когда оно должно быть 1/4/2016.

Спасибо!

1 Ответ

0 голосов
/ 11 мая 2018
Declare @week integer  = 2
Declare @Year Integer  = 2016
declare @date datetime

set @date = Dateadd(week, @week-1, DateAdd(day, 0, DateAdd(month, 0, DateAdd(Year, @Year-1900, 0))))
set @date = dateadd(day, 2 - datepart(dw, @date), @date)

select @date startweek, DATEADD (D, -1 * DatePart (DW, @date) + 7, @date) endweek
...