Sql 需要更好的解决方案来删除特殊字符和数字
有没有更好的方法来删除一列中的所有特殊字符和数字,而不限于一个或两个,几乎可以删除所有特殊字符和数字。 现在我正在使用这个查询(Jst逻辑部分)。让我知道有没有更好的选择,因为我的表至少包含500万条记录Sql 需要更好的解决方案来删除特殊字符和数字,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,有没有更好的方法来删除一列中的所有特殊字符和数字,而不限于一个或两个,几乎可以删除所有特殊字符和数字。 现在我正在使用这个查询(Jst逻辑部分)。让我知道有没有更好的选择,因为我的表至少包含500万条记录 Declare @name varchar(1000) = '231323Lig%$%$h$%t' Declare @dumy varchar(1000) while(PATINDEX('%[0-9]%',@name)<>0) SET @name = stuff(@n
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'
Declare@name varchar(1000)='231323Lig%%$%$h$%t'
声明@dumy varchar(1000)
而(PATINDEX('%[0-9]]',@name)0)
设置@name=stuff(@name,PATINDEX('%[0-9]]',@name),1',)
而(PATINDEX('%[A-Z]',@name)0)
开始
SET@dumy=isnull(@dumy,)+子字符串(@name,PATINDEX(“%[A-Z]]”,@name),1)
设置@name=stuff(@name,PATINDEX('%[A-Z]]',@name),1',)
结束
Set@name=@dumy
选择@name“Clean”
尝试此功能:
可以这样称呼:
输出:
更新 如果你想整张桌子都这样做,就这样试试
Select dbo.RemoveNonAlphaCharacters(ColumnName),OtherColumn1,OtherColumn2
FROM Table1
您可以将函数简化为一个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)
谢谢,它是gud,因为它是一个表,我无法将所有记录传递给函数。你能为我提供一个解决方案,立即对整个表执行此操作吗?@user3751754-是的,你可以对整个表执行此操作。请参阅我的最新答案。如果它对你有帮助,请标记答案
Select dbo.RemoveNonAlphaCharacters(ColumnName),OtherColumn1,OtherColumn2
FROM Table1
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
Regex.Replace(str, "[^a-zA-Z]+", "", RegexOptions.Compiled)