SQL 更新查询以替换列中的最后 4 个字符

SQL Update query to replace last 4 characters in column

我需要替换一列中的最后四个字符。 目前是 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 通过 - ANSI 标准 SQL

如有任何帮助,我们将不胜感激。 谢谢!

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

结束

此外,您可以使用 left 代替子字符串。

这是一种方法:

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

我建议:

UPDATE MyTable
    SET ENDDATE = STUFF(ENDDATE, 7, 4, DATENAME(year, GETDATE()))
    WHERE EndDate < StartDate;

WHERE 子句没有意义,因为您正在进行日期比较。

请注意变量在这里没有帮助。如果您使用 DATENAME(),则不必将任何内容转换为字符串,因为它 returns 是一个字符串。

我想了一会儿它们可能会存储为日期,但您永远不会将 01/01/ 作为有效日期。