所有可打印特殊字符的模式

时间:2016-06-09 08:36:52

标签: sql-server tsql

我需要一个适用于所有可打印特殊字符的模式。该模式将用于过滤字符串。

DECLARE @String NVARCHAR(256) = 'te@st%$#&'   -- input

-- patern for all printable special characters
-- ASCII 33-47, 58-64, 91-96 and 123-126
DECLARE @Pattern NVARCHAR(256)= '%[^ @%$#]%'



WHILE PATINDEX(@Pattern, @String) > 0
SET @String = STUFF(@String, PATINDEX(@Pattern, @String), 1, '')

SELECT @String

- 电流

- 输入:' te @ st%$#&'
- 输出:' @%$#'

- 期望的

- 输入:' te @ st%$#&'
- 输出:' @%$#&'

- 输入:' te @ st%$#`~DAS!%^ 789 *()€'
- 输出:' @%$#`〜!%^ *()'

由于

1 个答案:

答案 0 :(得分:0)

虽然它不是带有模式的纯解决方案,但您可以使用用户定义的函数来执行此操作:

CREATE FUNCTION dbo.RemoveNonDisplayChars(@pString VARCHAR(8000))
RETURNS VARCHAR(8000) AS BEGIN
DECLARE @IncorrectCharLoc SMALLINT, --Position of bad character
        @Pattern          VARCHAR(128)  --Bad characters to look for

 SELECT @Pattern          = '%['
                          + CHAR(0)+CHAR(1)+CHAR(2)+CHAR(3)+CHAR(4)
                          + CHAR(5)+CHAR(6)+CHAR(7)+CHAR(8)+CHAR(9)
                          + CHAR(10)+CHAR(11)+CHAR(12)+CHAR(13)+CHAR(14)
                          + CHAR(15)+CHAR(16)+CHAR(17)+CHAR(18)+CHAR(19)
                          + CHAR(20)+CHAR(21)+CHAR(22)+CHAR(23)+CHAR(24)
                          + CHAR(25)+CHAR(26)+CHAR(27)+CHAR(28)+CHAR(29)
                          + CHAR(30)+CHAR(31)+CHAR(127)
                          + ']%',
        @IncorrectCharLoc = PATINDEX(@Pattern, @pString)

  WHILE @IncorrectCharLoc > 0
 SELECT @pString          = STUFF(@pString, @IncorrectCharLoc, 1, ''),
        @IncorrectCharLoc = PATINDEX(@Pattern, @pString)
 RETURN @pString
 END

此链接的更多信息:Remove non printable characters

如果要删除所有字母,请使用以下代码启动模式:'%[a-z,A-Z,' + CHAR(0) + ...