需要更好的解决方案来删除特殊字符和数字

Posted

技术标签:

【中文标题】需要更好的解决方案来删除特殊字符和数字【英文标题】:Need Better Solution to remove special characters and Numbers 【发布时间】:2014-06-19 11:15:25 【问题描述】:

有没有更好的方法去除一列中的所有特殊字符和数字,不限于一两个几乎可以去除所有的特殊字符和数字。 截至目前,我正在使用此查询(Jst Logic 部分)。让我知道是否有更好的选择,因为我的表包含至少 500 万条记录

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

【讨论】:

谢谢它是 gud,因为它是一个表,我不能将所有记录传递给一个函数,你能不能提供一个解决方案来一次性为整个表做这件事。 @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)

【讨论】:

以上是关于需要更好的解决方案来删除特殊字符和数字的主要内容,如果未能解决你的问题,请参考以下文章

如何对包含数字和特殊字符的字符串进行词法化?

使用 owa_pattern 删除数字和特殊字符

在 sqlite 中本地删除特殊字符

使用php和正则表达式从字符串中删除数字和特殊字符[重复]

如何使用正则表达式从字符串中删除字符串和特殊字符并仅显示不带逗号的数字?

除了文本,如何从文本中删除数字、标点、空格和特殊字符? [复制]