У меня есть таблица с датами окончания в разные годы, и я хотел бы изменить любой год, заканчивающийся на «2004», на «4712». Столбец имеет тип даты, и я продолжаю получать сообщение об ошибке
Я пробовал разные коды и операторы case, но ни один из них не работал
select
case
when h.EndDate like '2004%' then '4712%'
else h.EndDate
end as EndDate
from table h
1/31/2004
2/28/2004
3/31/2004
и так далее будут единственные годы, измененные на:
1/31/4712
2/28/4712
3/31/4712
Вы можете сделать это, используя dateadd()
. Like
работает со строковыми типами данных, такими как varchar, nvarchar и т. д. При работе с датами вам необходимо использовать функции, подготовленные для работы с этими типами данных (дата, дата и время и т. д.). К вашей дате я добавил 2708 год, что добавило к 4712.
update table
set EndDate = dateadd(year, 2708, EndDate)
where year(EndDate) = 2004
Лично я бы использовал datefromparts()
:
select datefromparts(4712, month(h.enddate), day(h.enddate))
from h
where h.enddate >= '2014-01-01' and h.enddate < '2015-01-01';
В обновлении это выглядит так:
update h
set enddate = datefromparts(4712, month(h.enddate), day(h.enddate))
where h.enddate >= '2014-01-01' and h.enddate < '2015-01-01';
datefromparts() был идеальным, так как я не мог использовать обновление. Спасибо!