Comment puis-je créer un MODÈLE DE REMPLACEMENT en SQL?

J'ai une longue variable NVARCHAR où j'ai besoin de replace un motif comme ceci:

DECLARE @data NVARCHAR(200) = 'Hello [PAT1] stackoverflow [PAT2] world [PAT3]' 

Je dois replace tous les [PAT%] par un espace vide pour ressembler à ceci:

 'Hello stackoverflow world' 

Comment puis-je faire cela en utilisant T-SQL dans SQL Server 2008?

Je cherchais dans d'autres questions, et je n'ai trouvé que cela , mais cela ne m'aide pas, parce que je n'ai pas besoin de conserver la partie originale de la corde.

    Vous pouvez utiliser cette fonction pour replace un motif. Vous pouvez le tester avec cette démo SQL-Fiddle pour tester.

     CREATE FUNCTION dbo.PatternReplace ( @InputSsortingng VARCHAR(4000), @Pattern VARCHAR(100), @ReplaceText VARCHAR(4000) ) RETURNS VARCHAR(4000) AS BEGIN DECLARE @Result VARCHAR(4000) SET @Result = '' -- First character in a match DECLARE @First INT -- Next character to start search on DECLARE @Next INT SET @Next = 1 -- Length of the total ssortingng -- 8001 if @InputSsortingng is NULL DECLARE @Len INT SET @Len = COALESCE(LEN(@InputSsortingng), 8001) -- End of a pattern DECLARE @EndPattern INT WHILE (@Next <= @Len) BEGIN SET @First = PATINDEX('%' + @Pattern + '%', SUBSTRING(@InputSsortingng, @Next, @Len)) IF COALESCE(@First, 0) = 0 --no match - return BEGIN SET @Result = @Result + CASE --return NULL, just like REPLACE, if inputs are NULL WHEN @InputSsortingng IS NULL OR @Pattern IS NULL OR @ReplaceText IS NULL THEN NULL ELSE SUBSTRING(@InputSsortingng, @Next, @Len) END BREAK END ELSE BEGIN -- Concatenate characters before the match to the result SET @Result = @Result + SUBSTRING(@InputSsortingng, @Next, @First - 1) SET @Next = @Next + @First - 1 SET @EndPattern = 1 -- Find start of end pattern range WHILE PATINDEX(@Pattern, SUBSTRING(@InputSsortingng, @Next, @EndPattern)) = 0 SET @EndPattern = @EndPattern + 1 -- Find end of pattern range WHILE PATINDEX(@Pattern, SUBSTRING(@InputSsortingng, @Next, @EndPattern)) > 0 AND @Len >= (@Next + @EndPattern - 1) SET @EndPattern = @EndPattern + 1 --Either at the end of the pattern or @Next + @EndPattern = @Len SET @Result = @Result + @ReplaceText SET @Next = @Next + @EndPattern - 1 END END RETURN(@Result) END 

    Lien de ressource .