#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-server-2008
Вопрос:
Есть ли лучший способ удалить все специальные символы и цифры в столбце, не ограничиваясь одним или двумя, чтобы удалить все специальные символы и цифры. На данный момент я использую этот запрос (логическая часть Jst). Дайте мне знать, есть ли лучший выбор, поскольку моя таблица содержит минимум 5 миллионов записей
Declare @name varchar(1000) = '231323Lig%$%$h$%t'
Declare @dumy varchar(1000)
while(PATINDEX('%[0-9]%',@name)<>0)
SET @name = stuff(@name,PATINDEX('%[0-9]%',@name),1,'')
while(PATINDEX('%[A-Z]%',@name)<>0)
begin
SET @dumy = isnull(@dumy,'') substring(@name,PATINDEX('%[A-Z]%',@name),1)
SET @name = stuff(@name,PATINDEX('%[A-Z]%',@name),1,'')
end
Set @name = @dumy
Select @name 'Clean'
Ответ №1:
Попробуйте эту функцию:
Create Function [dbo].[RemoveNonAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^a-z]%'
While PatIndex(@KeepValues, @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')
Return @Temp
End
Назовите это так:
Select dbo.RemoveNonAlphaCharacters('231323Lig%$%$h$%t')
Вывод:
Clean
Light
Обновить
Если вы хотите сделать это для всей таблицы, просто попробуйте так
Select dbo.RemoveNonAlphaCharacters(ColumnName),OtherColumn1,OtherColumn2
FROM Table1
Комментарии:
1. Спасибо, это хорошо, поскольку это таблица, я не могу передать все записи в функцию, можете ли вы предоставить мне решение, чтобы сделать это сразу для всей таблицы.
2. @user3751754- Да, вы можете сделать это для всей таблицы. Смотрите мой обновленный ответ. Отметьте ответ, если это помогло вам
Ответ №2:
Вы можете упростить свою функцию до одного цикла WHILE:
DECLARE @String NVARCHAR(MAX) = '231323Lig%$%$h$%t'
DECLARE @Expression NVARCHAR(32) = '%[^A-Z]%'
WHILE PATINDEX(@Expression, @String) > 0
SET @String = STUFF(@String, PATINDEX(@Expression, @String), 1, '')
RETURN @String
CLR
Функция может быть быстрее, чем чистая реализация T-SQL.
Regex.Replace(str, "[^a-zA-Z] ", "", RegexOptions.Compiled)