Sql server SQL-替换字符串函数未按预期工作

Sql server SQL-替换字符串函数未按预期工作,sql-server,Sql Server,我有一个简单的字符串;例如,“01023201580001” 我想替换此字符串的最后两个字符;'01',带“00” 我可以从这个字符串中提取最后两个字符作为RIGHT(columname,2),然后使用 REPLACE([columname], RIGHT([columname], 2), '00') as newColumnString 但结果是,它也替换了前两个字符 预期结果:01023201580000 结果我得到:00023201580000 我做错了什么?在SQL server中,可

我有一个简单的字符串;例如,“01023201580001”

我想替换此字符串的最后两个字符;'01',带“00”

我可以从这个字符串中提取最后两个字符作为
RIGHT(columname,2)
,然后使用

REPLACE([columname], RIGHT([columname], 2), '00') as newColumnString
但结果是,它也替换了前两个字符

预期结果:01023201580000

结果我得到:00023201580000


我做错了什么?

在SQL server中,可以像这样使用子字符串:

DECLARE @s NVARCHAR(20) = N'01023201580001';
DECLARE @ReplaceWith NVARCHAR(20) = N'00';

SELECT SUBSTRING(@s, 0, LEN(@s) - 1) + @ReplaceWith;

输出:01023201580000

函数的第二个参数定义要匹配的模式。函数将在目标字符串(第一个参数)中查找该模式的所有实例,并用替换文本(第三个参数)替换它们

如果您知道只需要更改最后两个字符,则可以采用不包括这些字符的值,然后附加所需的字符:

select left(columname, len(columname) - 2) + '00';
如果对整个列执行此操作,并且某些行可能不会以“01”结尾,则可以将其过滤掉:

update MyTable
set    columname = left(columname, len(columname) - 2) + '00'
where  columname like '%01';

您也可以以类似的方式使用。

这不是Oracle。您正在使用哪些RDBMS?mySQL?SQL Server?