仅在带有案例声明的列中的日期中更改年份

时间:2019-05-28 18:32:21

标签: sql sql-server

我有一张表,其中有不同年份的结束日期,并且想要将以'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

2 个答案:

答案 0 :(得分:1)

您可以使用dateadd()进行此操作。 Like适用于字符串数据类型,例如varchar,nvarchar等。在处理日期时,您需要使用准备用于此数据类型的函数(日期,日期时间等)。在您的日期中,我添加了2708 year,它添加到4712

update table
set EndDate = dateadd(year, 2708, EndDate)
where year(EndDate) = 2004

答案 1 :(得分:1)

我个人会使用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';