我必须从@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 ,' ')
答案 0 :(得分:19)
您可以使用STUFF
和CHARINDEX
的组合来实现您的目标:
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)
您可以执行CHARINDEX
或PATINDEX
,如上所示,但是我还建议添加一个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'
说明相同