SQL Server如何为现有datetime列加年数生成新的datetime列
DATEADD本身完全支持datetime2类型计算,你之前出错大概率是参数使用有误,或是搭配LEFT做了不必要的字符串转换导致精度丢失、计算错误。
实现步骤
1. 新增NewStartTime列
先给表新增和StartTime类型一致的datetime2(7)列,避免精度损失:
ALTER TABLE 你的实际表名 ADD NewStartTime datetime2(7);
请替换代码中的你的实际表名为你操作的表的真实名称
2. 批量更新列值
直接使用DATEADD计算,不需要做任何字符串截断或转换操作:
UPDATE 你的实际表名 SET NewStartTime = DATEADD(YEAR, 3, StartTime);
DATEADD参数说明:第一个参数指定时间单位为YEAR,第二个参数为要增加的数值3,第三个参数直接传入StartTime原生日期类型即可,会完整保留datetime2(7)的全部时间精度。
结果验证
执行更新后可抽样校验计算结果:
SELECT TOP 10 StartTime, NewStartTime FROM 你的实际表名;
正常情况下NewStartTime除年份比StartTime大3之外,月份、日期、时间部分完全一致。SQL Server的DATEADD会自动处理闰年场景:如果原时间为2020-02-29,加3年得到的结果为2023-02-28,符合通用业务逻辑。
内容的提问来源于stack exchange,提问作者LNV
相关产品推荐
相关产品推荐

