我的 sql 表中有特殊字符,想删除这些特殊字符。
我有一个函数可以去除所有破坏 XML 的字符。
fn_RemoveBadXMLChars(data)
它做这样的事情:
REPLACE(@ResultVar,'ÿ','')
有没有更简单的方法来删除每个特殊字符而不是有 100 个替换语句?
我的 sql 表中有特殊字符,想删除这些特殊字符。
我有一个函数可以去除所有破坏 XML 的字符。
fn_RemoveBadXMLChars(data)
它做这样的事情:
REPLACE(@ResultVar,'ÿ','')
有没有更简单的方法来删除每个特殊字符而不是有 100 个替换语句?
您可以创建一个过滤表,其中包含要替换的每个值的记录,如下所示:
CREATE TABLE FilterTable (
FilterCharacter nchar(1) primary key
)
INSERT INTO FilterTable SELECT 'ÿ'
INSERT INTO FilterTable SELECT 'o'
然后使用一个变量来替换您的过滤器表,如下所示:
DECLARE @ResultVar nvarchar(50)
SET @ResultVar = 'Bobbÿ'
SELECT @ResultVar = REPLACE(@ResultVar, FilterCharacter, '')
FROM FilterTable
SELECT @ResultVar
我喜欢 LittleBobbyTables 的回答,但另一种方法是将你的函数代码更改为这样的
declare @value as varchar(100) = ' 98;;445498ÿThis is test ';
declare @len as int = LEN(@value);
declare @i as int = 1;
declare @work as varchar(1);
declare @retValue as varchar(max) = '';
declare @asciiValue as int
while @i <= @len begin
set @i = @i + 1;
set @work = SUBSTRING(@value,@i,1);
set @asciiValue = ASCII(@work);
-- Allow space(32) though } (125)
if (@asciiValue between 32 and 125) and @asciiValue not in (38) -- Exclude
set @retValue = @retValue + @work;
end
print @retValue
我结合了一些我找到的解决方案,最后我得到了这个结果:
CREATE FUNCTION [dbo].[RemoveSpecialChars] (@Input VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
DECLARE @Expression NVARCHAR(50) = '[^A-Za-z0-9]'
DECLARE @pos INT = PATINDEX('%' + @Expression + '%', @Input)
WHILE @Pos > 0
BEGIN
SET @Input = STUFF(@Input, @pos, 1, '')
SET @Pos = PATINDEX('%' + @Expression + '%', @Input)
END
RETURN @Input
END
您可以通过修改@Expression 来定义要保留的字符。如果你想保留所有字符和数字加上'@'你会改变
DECLARE @Expression NVARCHAR(50) = '[^A-Za-z0-9]'
到
DECLARE @Expression NVARCHAR(50) = '[^@A-Za-z0-9]'
这将删除除字符、数字和“@”之外的所有内容。