如何在字符串中找到特殊字符并将其替换为 SQL 中的 space?
How to find a special characters in a string and replace it with a space in SQL?
我有 contact_firstname 列,该列中存储的数据中有一些特殊字符,如 (@、&、-、_ 等)。我想首先在每条记录中找到所有这些特殊字符,并将这些字符替换为 space。我在这个网站上找到了一个有助于识别特殊字符的查询,但我不确定如何在下面的字符串中找到每个特殊字符的 charindex 并将其替换为 space。
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
结果:
Char Fox
这是在这里找到的解决方案的组合:
How to Replace Multiple Characters in SQL?
T-SQL: Opposite to string concatenation - how to split string into multiple records [duplicate]
我有 contact_firstname 列,该列中存储的数据中有一些特殊字符,如 (@、&、-、_ 等)。我想首先在每条记录中找到所有这些特殊字符,并将这些字符替换为 space。我在这个网站上找到了一个有助于识别特殊字符的查询,但我不确定如何在下面的字符串中找到每个特殊字符的 charindex 并将其替换为 space。
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
结果:
Char Fox
这是在这里找到的解决方案的组合:
How to Replace Multiple Characters in SQL?
T-SQL: Opposite to string concatenation - how to split string into multiple records [duplicate]