-- First заменяет специальные символы на аналогичные безопасные.
Похоже, вы хотите заменить открытую кавычку обычной кавычкой, закрыть кавычку обычной кавычкой и т. д. Есть трюк, который вы можете использовать, чтобы сделать это без необходимости возиться с кучей замен. Я не претендую на то, что знаю все, что нужно знать о сопоставлениях, но я знаю, что они могут делать довольно странные вещи, которых вы не ожидаете, и иногда вы можете использовать это в своих интересах.
Например:
Declare @Temp VarChar(100)
SET @Temp = '”“‘’–'
Select @Temp,
@Temp Collate SQL_Latin1_General_Cp850_CI_AS
Когда вы запустите приведенный выше код, вы увидите, что тип данных — varchar. Мы устанавливаем строку с открытой кавычкой, закрытой кавычкой и т. д. Если вы не укажете сопоставление, sql вернет данные, используя сопоставление базы данных по умолчанию. Если вы укажете сопоставление, SQL вернет данные, используя сопоставление.
Как видите, все специальные символы, которые вы хотите заменить «безопасными» специальными символами, фактически заменяются.
Собираем все вместе:
Alter Function [dbo].[RemoveSpecialCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
BEGIN
DECLARE @KeepValues as varchar(50)
SET @Temp = @Temp Collate SQL_Latin1_General_Cp850_CI_AS
SET @KeepValues = '%[^a-z0-9()."`'':;,#&+*\/-[[][]]]%'
WHILE PatIndex(@KeepValues, @Temp) > 0
SET @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')
RETURN @Temp Collate Database_Default
END
Обратите внимание, что внутри функции данные преобразуются в другую сортировку, а возвращаемое значение преобразует их обратно в сортировку по умолчанию базы данных.
Я также помещаю открывающую квадратную скобку и закрываю квадратную скобку в KeepValues.
Использование функции замены не обязательно плохо, но преобразование параметров сортировки будет выполняться быстрее и даст те же результаты. Скалярные функции печально известны как убийцы производительности, поэтому в ваших интересах сделать их как можно быстрее (и вы должны быть довольны производительностью этой функции).
Итак... Ранее я сказал, что не знаю всего, что нужно знать о сопоставлениях, так что могут быть некоторые неожиданности. Большинство символов будут одинаковыми, но есть некоторые отличия:
€ ?
?
‚ '
ƒ ƒ
„ "
… .
† ┼
‡ ╬
ˆ ^
‰ %
Š S
‹ <
Œ O
?
Ž Z
?
?
‘ '
’ '
“ "
” "
•
– -
— -
˜ ~
™ T
š s
› >
œ o
?
ž z
Ÿ Y
С данными, показанными выше, вы можете интерпретировать это как: первый символ будет заменен вторым символом при преобразовании сопоставления, как показано в приведенном выше коде.
07.03.2014