我在我的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