Как получить / добавить записи, связанные с интервалами даты в SQL? - PullRequest
1 голос
/ 29 августа 2011

У меня есть таблица в SQL Server, содержащая серию недель к началу недели:

id weekBeginning
1  2011-08-07 00:00:00
2  2011-08-14 00:00:00
3  2011-08-21 00:00:00
4  2011-08-28 00:00:00

Я хотел бы сохранить процесс, который при вводе даты @dt выводит идентификаторнедели, содержащей эту дату, создавая строку для этой недели, если она не существует.Между началом недели не будет совпадений.)

Я попробовал следующее в SQL Server, но в нем говорится, что у меня неверный синтаксис.Как правильно сделать это?

declare @weekid int
declare @weekBeginning datetime
while not exists(select @weekid = id from WeekTable where @dt between weekBeginning and date_add(weekBeginning, interval 7 day))
begin
    set @weekBeginning = (select max(weekBeginning)) from WeekTable
    insert WeekTable(weekBeginning) output inserted.id into @weekid values date_add(@weekBeginning, interval 7 day)
end

1 Ответ

1 голос
/ 29 августа 2011

Теперь, когда я перечитал требования.

С учетом произвольной даты / времени в любую неделю после максимальной недели в таблице:

DECLARE @dt DATETIME = '2011-09-15 13:42';

Вы можете запустить этот код:

-- just declare a variable to avoid expressing twice:
DECLARE @mw DATETIME = (SELECT MAX(WeekBeginning) FROM WeekTable);

;WITH n AS
(
       SELECT DISTINCT n = number
               FROM [master]..spt_values
               WHERE number BETWEEN 1 AND DATEDIFF(WEEK, @mw, @dt)
)
INSERT dbo.WeekTable(WeekBeginning)
SELECT DATEADD(WEEK, n, @mw) 
    FROM n ORDER BY n;

Нет необходимости в цикле и нет уверенности в том, где вы изучаете синтаксис - date_add неверен и ключевое слово interval также недопустимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...