Увеличение счетчика для dateadd - PullRequest
0 голосов
/ 06 сентября 2010

Я пытаюсь увеличить время между датами на установленную сумму.Например, я хочу добавить два месяца ко времени между датами 1,2 и 3. У меня возникают проблемы с увеличением моего «счетчика даты» ...

DECLARE @monthDiff int

SET @monthDiff = 1;

UPDATE [Table1]
SET [Date] = DATEADD(MONTH, (SET @monthDiff = @monthDiff + 1), [Date])
WHERE [ID] IN 
(
    SELECT [ID]
    FROM [Table2]
    WHERE [Description] = 'HE'
);

Пример может помочь ...

Оригинальные даты:

01/04/1984
01/05/1984
01/06/1984

Новые даты:

01/04/1984
01/06/1984
01/08/1984

Есть идеи?

Я использую SQLServer 2005.

Спасибо.

Ответы [ 3 ]

1 голос
/ 06 сентября 2010
;WITH cte AS
(
SELECT t1.ID, 
       t1.[Date], 
       ROW_NUMBER() OVER (PARTITION BY t1.ID ORDER BY [Date]) AS RN
FROM Table1 t1
JOIN Table2 t2
ON t1.ID = t2.ID 
WHERE t2.[Description] = 'HE'
)
UPDATE CTE
SET [Date] = DATEADD(MONTH, RN-1, [Date])
0 голосов
/ 06 сентября 2010

Из вашего примера кажется, что вы хотите изменить даты относительно базовой даты:

declare @basedate datetime
select @basedate = min([Date]) FROM Table1 WHERE ...

UPDATE [Table1]
SET [Date] = DATEADD(MONTH, DATEDIFF(MONTH, @basedate, [Date]) * 2, [Date])
WHERE ...
0 голосов
/ 06 сентября 2010

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

declare @numberOfMonthsToAdd int
declare @currentDate dateTime
set @numberOfMonthsToAdd = 0
declare myCursor cursor  for 
select [mydate] from Table1
open myCursor
while @@fetch_Status<>-1
begin
fetch next from myCursor into @currentDate
update Table1 set [mydate] = DATEADD(month,@numberOfMonthsToAdd, [mydate]) where [mydate] = @currentDate
set @numberOfMonthsToAdd = @numberOfMonthsToAdd + 1

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