如何在SQL中查找字符串中的特殊字符并将其替换为空格?

如何在SQL中查找字符串中的特殊字符并将其替换为空格?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有contact_firstname列,在该列中存储的数据中有一些特殊字符,如@、&、\u等。我想首先在每条记录中找到所有这些特殊字符,并用空格替换这些字符。我在这个网站上找到了一个帮助识别特殊字符的查询,但我不确定如何在下面的字符串中找到每个特殊字符的charindex并用空格替换它 DECLARE @MyString VARCHAR(100) SET @MyString = '!Char$Fox@' IF (@MyString LIKE '%[^a-zA-Z0-9]%') BEGI

我有contact_firstname列,在该列中存储的数据中有一些特殊字符,如@、&、\u等。我想首先在每条记录中找到所有这些特殊字符,并用空格替换这些字符。我在这个网站上找到了一个帮助识别特殊字符的查询,但我不确定如何在下面的字符串中找到每个特殊字符的charindex并用空格替换它

DECLARE @MyString VARCHAR(100)
SET @MyString = '!Char$Fox@'

IF (@MyString LIKE '%[^a-zA-Z0-9]%')
   BEGIN
      PRINT 'Contains "special" characters'

    END

我认为您必须循环,正如Tab Alleman提到的:

declare @MyString varchar(100) = '!Char$Fox@'
declare @i int = 0
declare @char varchar(1)
declare @len int = LEN(@MyString)
declare @result varchar(100) = ''

while @i < @len
begin
    set @char = SUBSTRING(@MyString, @i, 1)

    if @char like '%[^a-zA-Z0-9]%'
    begin
        set @char = ' '
    end

    set @result = @result + @char
    set @i = @i + 1
end

select @result
您也可以这样做:

DECLARE @InvalidChars VARCHAR(100)
DECLARE @MyString VARCHAR(100)

SET @InvalidChars = '!$@'
SET @MyString = '!Char$Fox@'

;WITH CTE AS
(
  SELECT SUBSTRING(@InvalidChars, 1, 1) AS [String], 1 AS [Start], 1 AS [Counter]
  UNION ALL
  SELECT SUBSTRING(@InvalidChars, [Start] + 1, 1) AS [String], [Start] + 1, [Counter] + 1 
  FROM CTE 
  WHERE [Counter] < LEN(@InvalidChars)
)

SELECT @MyString = REPLACE(@MyString, CTE.[String], ' ') FROM CTE

SELECT @MyString
结果:

焦狐

这是以下几种解决方案的组合:


编写一个函数,每次循环一个字符,如果是特殊字符,则用空格替换。是否在屏幕、输出或打印语句中显示“特殊字符”的空格,还是要替换数据库中的这些字符?我想替换数据库中的特殊字符。有一个替换函数,但它一次只能处理一个字符,而您的模式实际上只是试图查找任何非字母数字的字符,因此案例数将非常多。谢谢大家的帮助。