Мы использовали функцию, чтобы сделать что-то подобное, зацикливаемое по строке, хотя это было главным образом для удаления символов, которые не были в строке "@ValidCharacters". Это было полезно для удаления всего, что мы не хотели - обычно не буквенно-цифровых символов, хотя я думаю, что у нас также было место, цитата, одинарная кавычка и несколько других в этой строке. Это действительно использовалось для удаления непечатаемых символов, которые время от времени подкрадывались, поэтому не может быть идеальным для вашего случая, но может дать вам некоторые идеи.
CREATE FUNCTION [dbo].[ufn_RemoveInvalidCharacters]
(@str VARCHAR(8000), @ValidCharacters VARCHAR(8000))
RETURNS VARCHAR(8000)
BEGIN
WHILE PATINDEX('%[^' + @ValidCharacters + ']%',@str) > 0
SET @str=REPLACE(@str, SUBSTRING(@str ,PATINDEX('%[^' + @ValidCharacters +
']%',@str), 1) ,'')
RETURN @str
END
Ответ 3
Один комментарий упоминает "десятки вызовов замены"... если вы удаляете десятки отдельных символов, вы также можете использовать Перевод и одну Замену.