web-dev-qa-db-fra.com

Remplacer la première occurrence de sous-chaîne dans une chaîne en SQL

Je dois récupérer les données d'une table @temp qui a quelque chose comme "ou ccc ou bbb ou aaa" Je veux remplacer la première occurrence dans l'espace pour obtenir quelque chose comme ceci "ccc ou bbb ou aaa". J'essaie des trucs et je les remplace mais ils ne semblent pas m'obtenir le résultat souhaité

Ce que j'ai essayé:

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 ,' ')
17
Shobhit92

Vous pouvez utiliser une combinaison de STUFF et CHARINDEX pour obtenir ce que vous voulez:

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

CHARINDEX('substring', col) renverra l'index de l'occurrence first de 'substring' dans la colonne. STUFF remplace alors cette occurrence par 'replacement'.

23
Tim Biegeleisen

il semble que vous manquez 2% précédant et suivant la chaîne cible

s'il vous plaît essayez:

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