SQL Server 2008 R2: обновление прошлых дат до «следующей» даты

Я использую SQL Server 2008 R2. У меня есть таблица с множеством дат, некоторые в прошлом, некоторые в будущем. То, что я хотел бы сделать, это обновить их, чтобы даты были «следующей» датой по сравнению с сегодняшним днем.

Например, если текущая дата равна «2014-02-09»,

Current Value Desired Value ------------------------------------------------- '2010-01-06' '2015-01-06' (Updated to 2015) '2008-03-28' '2014-03-28' (Updated to 2014) 

Мне нужно будет учитывать даты 29 февраля, просто чтобы это стало проще!

Каков наилучший способ сделать это?

    Вы можете определить, кто много лет в прошлом. Затем добавьте это количество лет плюс один к дате:

     update t set datecol = dateadd(year, datediff(year, datecol, getdate()) + 1, datecol) where datecol < getdate(); 

    Это должно работать:

     Declare @CurrentDate datetime SET @CurrentDate = '2014-02-09' ;WITH NewDatesThisYear AS ( SELECT [Date], NewDate = DateAdd(yy, YEAR(@CurrentDate)-1900, DateAdd(m, MONTH([Date]) - 1, DAY([Date]) - 1)) FROM dbo.Dates ) , NewDates AS ( SELECT [Date], NewDate = CASE WHEN NewDate < @CurrentDate THEN DateAdd(yy, 1,NewDate) ELSE NewDate END FROM NewDatesThisYear ) UPDATE NewDates SET [Date] = NewDate WHERE [Date] < @CurrentDate 

    демонстрация

    непроверенные:

     CASE WHEN dateadd(yy, datecol, datediff(yy, datecol, getdate())) > getdate() THEN dateadd(yy, datecol, datediff(yy, datecol, getdate())) ELSE dateadd(yy, datecol, datediff(yy, datecol, getdate())+1) END 

    Это было бы намного проще, если бы SQL Server поддерживал простой расчет возраста 🙂

     dateadd(yy, datecol, age(datecol, getdate()) +1) 
    Interesting Posts

    Сохранение нулей при преобразовании varchar в float в SQL Server

    Создание связей между таблицами

    Проблема с процедурой создания или вложением. Сообщение об ошибке: «error near @Parameter Name»

    TSQL-запрос для фильтрации каталога

    Полнотекстовый поиск с CONTAINS очень медленный

    Использование значения одной ячейки в операторе select (работает с sqlcmd)

    Как отслеживать изменения таблицы SQL Server с помощью c #?

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

    Присоединение к SQL Server UDF с параметрами

    В SQL Server 2012, как мне получить имя столбца и тип данных из представления, функции или хранимой процедуры?

    Msg 8114, уровень 16, состояние 5, строка 1 Ошибка преобразования типа данных varchar в числовой

    SQL Server – оператор case для одного поля на основе содержимого других полей

    Должен объявить скалярную переменную в команде Select

    Вставка одной записи за раз в несколько таблиц из таблицы

    Определите десятичную шкалу MAX, используемую в столбце

    Давайте будем гением компьютера.