我在我的sql表格中有特殊字符,并且想要删除特殊字符。从数据中删除特殊/不可打印字符
我有一个函数可以去除所有破坏XML的字符。
fn_RemoveBadXMLChars(data)
这确实是这样的:
REPLACE(@ResultVar,'ÿ','')
有没有删除所有特殊字符,而不是有100取代statments任何更简单的方法?
我在我的sql表格中有特殊字符,并且想要删除特殊字符。从数据中删除特殊/不可打印字符
我有一个函数可以去除所有破坏XML的字符。
fn_RemoveBadXMLChars(data)
这确实是这样的:
REPLACE(@ResultVar,'ÿ','')
有没有删除所有特殊字符,而不是有100取代statments任何更简单的方法?
您可以创建一个包含每个要替换的值的记录中的过滤表,就像这样:
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]'
这消除了一切,但字符,数字和“@”。
任何特定的DBMS(MySQL,Postgres,SQL Server ...)? – PinnyM
我正在使用MS SQL 2008 – Arcadian
@ magic-c0d3r - 你有没有解决这个问题? – LittleBobbyTables