Hi SSAS_5000,
As Naomi suggested, you may have to loop to replace in a function. If a Stored Procedure can be alternative, you can reference below.
USE TestDB
GO
CREATE TABLE reference --drop table reference
(
ID INT,
String NVARCHAR(99),
ReplaceWith NVARCHAR(99)
);
INSERT INTO reference
VALUES(1,'≈','&'),(2,'<','<'),(3,'>','>');
GO
CREATE PROC procToRepalce(@s NVARCHAR(2000)) --drop proc procToRepalce
AS
BEGIN
DECLARE @RepStr NVARCHAR(2000);
;WITH Cte AS
(
SELECT String,ReplaceWith,ROW_NUMBER() OVER(ORDER BY LEN(String) DESC) RN FROM reference
)--SELECT 1 rn2, CAST(('REPLACE(@s,'''+String+''','''+ReplaceWith+''')') AS NVARCHAR(MAX)) RepStr FROM Cte WHERE rn=1
,
Cte2 AS
(
SELECT 1 rn2, CAST(('REPLACE(@s,'''+String+''','''+ReplaceWith+''')') AS NVARCHAR(MAX)) RepStr FROM Cte WHERE rn=1
UNION ALL
SELECT rn2+1, CAST(('REPLACE('+RepStr+','''+String+''','''+ReplaceWith+''')') AS NVARCHAR(MAX)) FROM Cte2 c2 JOIN Cte c
ON c2.rn2+1=c.rn
)
SELECT @RepStr=RepStr FROM cte2 c WHERE NOT EXISTS(SELECT 1 FROM Cte2 WHERE rn2>c.rn2)
SET @RepStr = 'SELECT ' + @RepStr
PRINT @RepStr
EXEC sp_executesql @RepStr, N'@s NVARCHAR(2000)',@s=@s
END
;
GO
DECLARE @s NVARCHAR(2000)=N'<car ≈ wheels >'
EXEC procToRepalce @s
/*
<car & wheels >
*/
If you have any question, feel free to let me