在SQL中替换字符串中第一次出现的子字符串

Sho*_*t92 18 sql sql-server sql-server-2012

我必须从@temp表中获取数据,其中包含类似"或ccc或bbb或aaa"的内容.我想将第一个匹配项替换为空格以获得类似"ccc或bbb或aaa"的内容.我正在尝试和替换,但他们似乎没有得到我想要的结果

我尝试过的:

DECLARE @stringhere as varchar(500)

DECLARE @stringtofind as varchar(500)

set @stringhere='OR contains or cccc or  '

set @stringtofind='or'
select STUFF('OR contains or cccc or  ',PATINDEX('or', 'OR contains or cccc or  '),0 ,' ')
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 26

您可以结合使用STUFFCHARINDEX实现您想要的效果:

SELECT STUFF(col, CHARINDEX('substring', col), LEN('substring'), 'replacement')
FROM #temp
Run Code Online (Sandbox Code Playgroud)

CHARINDEX('substring', col)将返回列中第一次出现的索引'substring'. STUFF然后替换此事件'replacement'.

  • 有点晚了(但很惊讶之前没有注意到这一点),但这似乎只有在 *is* 出现 `'substring'` 时才有效。如果没有,则返回 `null`。因此,建议使用 `CASE` 表达式来捕获它。 (5认同)
  • @HoneyBadger 不错的收获。或者,我们可以将整个对 `STUFF` 的调用包装在 `COALESCE` 中,并用原始列替换空值。 (2认同)