我有一个简单的字符串;例如“ 01023201580001”。
我想替换此字符串的最后两个字符; '01'和'00'。
我可以从该字符串中提取最后两个字符为RIGHT(columname,2)
,然后使用
REPLACE([columname], RIGHT([columname], 2), '00') as newColumnString
但是结果是,它也替换了前两个字符吗?
预期结果:010232015800 00
我得到的结果是: 00 0232015800 00
我在做什么错了?
答案 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()
。