如何在SQL Server中替换第n个字符

34

我正在尝试替换SQL Server中的第n个字符。 我尝试使用replace()函数:

SELECT REPLACE(ABC,0,1)  FROM XXX
在上面的代码中,所有的零将被替换为一,但我只想在特定的位置进行更改,有时这个位置可能会改变。
在上述代码中,所有的零都将被替换为一,但我只想在特定位置进行更改,有时该位置可能会发生变化。
6个回答

41

使用STUFF函数可以将一个字符串插入到另一个字符串中,它会在第一个字符串的指定起始位置删除一定长度的字符,然后将第二个字符串插入到第一个字符串的起始位置。

select STUFF(ABC, starting_index, 1, 'X') from XXX

"Here your int position to replace" 是要替换的位置,只需将其替换为任何整数即可替换该位置。 注意:(感谢pcnate提供建议) starting_index是您要替换的整数位置。


我建议使用一个虚假的变量名,比如 lenth_ofthestring_to_replace_from_starting_index 或者 starting_index 来清楚地表明它应该是一个数字而不是字符串。整个句子来描述一个字符串只会使答案变得臃肿。 - pcnate

31

你正在寻找 STUFF

select STUFF(ABC, @n, 1, 'X') from XXX

这将用X替换第@n个字符。

技术上,它会在原始字符串中的列ABC处从位置@n开始查找,删除1个字符,然后在该位置插入字符串'X'


13

你可以使用STUFF来实现此操作:

SELECT STUFF(ABC, 5, 1, '1')
FROM XXX

这会用 1 替换第 5 个字符。


8

使用stuff()函数:

select stuff(abc, 0, 1, 'a')

这里有相关的文档链接


它也可以使用变量: SET @MY_VARIABLE=STUFF(@MY_VARIABLE,14,1,'h'); - Pierre C

6
使用工具。
STUFF(Column_Name,starting_index,
lenth_ofthestring_to_replace_from_starting_index, character_to_replce)

示例_

DECLARE @str varchar(100) = '123456789'
select @str
SELECT STUFF(@str,2,1, 'hello') 
-- want to replece 1 charter starting from 2nd position with the string 'hello'

请检查这个。

 SELECT STUFF(@str,2,25, 'hello'),len(@str)

0

我有一个带有PartDesc列的表格,如下所示,我需要删除从索引1开始直到-字符的字符。

PartDesc
OPERA_BLUE-ALTROZ DCA XZ 1.2 RTN BS6
ATLAS_BLACK-NEXON XZ+ DK 1.2 RTN BS6
DAYTONA_GREY-PUNCH ADV 1.2P BS6 MT RT
ARCADE_GREY-ALTROZ XZ+ 1.2 RTN BS6
CALGARY_WHTE-NEXON XM(S) 1.2 RTN BS6

在这里,使用以下查询后,我得到了期望的结果:

Select PATINDEX('%-%',PartDesc),Stuff(PartDesc,1,PATINDEX('%-%',PartDesc),'' ),* from #temp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接