SQL-替换字符串功能无法正常工作

时间:2020-07-09 18:51:01

标签: sql-server

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

我想替换此字符串的最后两个字符; '01'和'00'。

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

REPLACE([columname], RIGHT([columname], 2), '00') as newColumnString

但是结果是,它也替换了前两个字符吗?

预期结果:010232015800 00

我得到的结果是: 00 0232015800 00

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

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

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

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

输出:01023201580000

答案 1 :(得分:1)

replace()函数的第二个参数定义要匹配的 pattern 。该函数将在目标字符串(第一个参数)中查找该模式的 all 个实例,并将其替换为替换文本(第三个参数)。

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

select left(columname, len(columname) - 2) + '00';

如果您要对整列执行此操作,而某些行可能未以'01'结尾,则可以将其过滤掉:

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

您也可以类似的方式使用stuff()