Функция для удаления всех не-буквенных c символов, верхних и нижних индексов, кроме da sh '-' - PullRequest
0 голосов
/ 30 января 2020

Мне нужно создать функцию T- SQL, которая содержит только дефис (da sh '-') и удаляет все не-алфавитные символы c (плюс все пробелы, верхние индексы и индексы) из заданного строка.

Вы можете проверить Superscript / Subscripts в SSMS:

select  'Hello® World™ '

Пример:

строка ввода
enter image description here

строка вывода:

HelloWorld-ThisIsATest123

Любые решения или мысли будут оценены.

Ответы [ 2 ]

1 голос
/ 30 января 2020

Проверьте эту ссылку. Это удалит все буквенные цифры c символов. Вы также можете включить '-' во включенный список.

Как вырезать все не алфавитные c символы из строки в SQL Сервер?

В В этом примере для ответа от @George Mastros, используйте «% [^ a-zA-Z0-9 -]%» для регулярного выражения вместо «% [^ az]%»

Вот переформатированная функция включить '-' и цифры c символов:

-- Reformatted function
Create Function [dbo].[RemoveNonAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS

Begin
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^a-zA-Z0-9\-]%' 
While PatIndex(@KeepValues, @Temp) > 0
    Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')

Return @Temp
End

--Call function    


 Select dbo.RemoveNonAlphaCharacters('Hello® World™   -123 !@#$%^')

ВЫХОД: HelloWorld-123

0 голосов
/ 30 января 2020

Я идентифицировал проблему моего кода - у меня ранее была та же самая функция, которая НЕ удаляла верхний индекс / нижний индекс, и я задавался вопросом, почему. Проблема заключалась в следующем: тип данных ввода / вывода должен НЕ быть NVARCHAR, а просто varchar, иначе он будет содержать верхние индексы в возвращаемой строке:

problem code :
    Create Function [dbo].[RemoveNonAlphaCharacters](@Temp NVarChar(1000))
           Returns NVarChar(1000)
           AS
            ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...