替换SQL

时间:2016-08-12 06:47:09

标签: 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 ,' ')

4 个答案:

答案 0 :(得分:19)

您可以使用STUFFCHARINDEX的组合来实现您的目标:

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

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

答案 1 :(得分:2)

似乎你错过了2 %前面跟踪目标字符串

请尝试:

select STUFF(@stringhere, PATINDEX('%' + @stringtofind + '%', @stringhere), LEN(@stringtofind), ' ')

答案 2 :(得分:1)

您可以执行CHARINDEXPATINDEX,如上所示,但是我还建议添加一个COALESCE,以防您的@stringtoFind不包括在您的计算机中。 @stringhere

SELECT COALESCE(STUFF(@stringhere, PATINDEX('%' + @stringtofind + '%', @stringhere), LEN(@stringtofind), ' '), @stringhere)

答案 3 :(得分:1)

我遇到了与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'

说明相同