首页 > 解决方案 > SQL 更新查询以替换列中的最后 4 个字符

问题描述

我需要替换列中的最后四个字符。目前是 char 格式的一年,我需要用当前年份替换。我现在使用的代码成功地删除了旧年份,但无法输入所需的新年份。

我当前的代码:

DECLARE @NewYear as Char
SELECT @NewYear = cast(YEAR(GETDATE()) as char(4))

UPDATE MyTable
SET ENDDATE = (substring(ENDDATE, -5, len(ENDDATE)) +@NewYear)
WHERE EndDate < StartDate

原始值 - 01/01/2017 结果 - 01/01/ 期望结果 - 01/01/2020

这在 SAS Proc SQl pass through - ANSI Standard SQL 中使用

任何帮助,将不胜感激。谢谢!

标签: sqlsql-servertsqlsql-updatedate-arithmetic

解决方案


你的变量声明有问题。它应该被声明为char(4)- 否则它默认为char(1)value'2'而不是2020.

此外,您可以使用lefto 子字符串。

这是一种方法:

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

推荐阅读