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

新手上路,请多包涵

我必须从@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 ,' ')

原文由 CrazySwazy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
2 个回答

您可以使用 STUFFCHARINDEX 的组合来实现您想要的:

 SELECT STUFF(col, CHARINDEX('substring', col), LEN('substring'), 'replacement')
FROM #temp

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

原文由 Tim Biegeleisen 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了同样的问题并做出了与 Tim Biegeleisen 相同的响应,但在一个函数中:

 CREATE FUNCTION DBO.FN_REPLACE_FIRST(@X NVARCHAR(MAX), @F NVARCHAR(MAX), @R NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN
RETURN STUFF(@X, CHARINDEX(@F, @X), LEN(@F), @R)
END

所以我只是调用该函数:

 SELECT DBO.FN_REPLACE_FIRST('Text example', 'ex', 'eexx') --> Returns 'Teexxt example'

解释是一样的

原文由 Erick de Vathaire 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进