SQL Server 2016日期列修改:保留年份,替换月日为05-20
解决SQL Server 2016日期列替换月日为固定值的问题
你之前用的DATEFROMPARTS(YEAR([你的日期列名]), 5, 20)思路偏了——这个函数是给原日期增加5个月,而不是替换月日部分,难怪达不到预期效果。针对你的需求(保留原年份,统一改成05-20),给你两个靠谱的方案:
方案1:用DATEFROMPARTS函数(推荐)
SQL Server 2012及以上版本支持这个函数,它可以直接通过年份、月份、日期参数生成新的日期,类型安全且代码直观:
-- 先测试结果是否符合预期 SELECT [你的日期列名] AS 原日期, DATEFROMPARTS(YEAR([你的日期列名]), 5, 20) AS 修改后日期 FROM [你的表名]; -- 确认没问题后执行更新 UPDATE [你的表名] SET [你的日期列名] = DATEFROMPARTS(YEAR([你的日期列名]), 5, 20);
方案2:字符串拼接+类型转换
如果习惯用字符串处理的方式,也可以提取年份后拼接固定的月日字符串,再转成DATE类型:
-- 先测试 SELECT [你的日期列名] AS 原日期, CAST(CAST(YEAR([你的日期列名]) AS VARCHAR(4)) + '-05-20' AS DATE) AS 修改后日期 FROM [你的表名]; -- 执行更新 UPDATE [你的表名] SET [你的日期列名] = CAST(CAST(YEAR([你的日期列名]) AS VARCHAR(4)) + '-05-20' AS DATE);
重要提醒
执行UPDATE操作前一定要先跑SELECT测试,确认修改后的结果完全符合你的要求,避免误操作导致数据错误!
内容的提问来源于stack exchange,提问作者l217
相关产品推荐
相关产品推荐

