В объявлении вашей переменной есть проблема. Он должен быть объявлен как char(4)
- в противном случае по умолчанию он равен char(1)
и заканчивается значением '2'
instea 2020
.
Также вы можете использовать left
вместо o подстроки
Вот один из способов сделать это:
DECLARE @NewYear as Char(4)
SELECT @NewYear = CAST(YEAR(GETDATE()) as char(4))
UPDATE MyTable
SET ENDDATE = LEFT(ENDDATE , len(ENDDATE) - 4) + @NewYear
WHERE EndDate < StartDate
Обратите внимание, что использование переменной здесь дает мало преимуществ. Весьма вероятно, что база данных оптимизирует выражение и не будет выполнять вычисления на основе getdate()
для каждой строки.
UPDATE MyTable
SET ENDDATE = LEFT(ENDDATE , len(ENDDATE) - 4) + cast(YEAR(GETDATE()) as char(4))
WHERE EndDate < StartDate