在SQL Server 2008中的列中查找所有特殊字符

mik*_*sey 13 sql-server

我需要在列中找到所有特殊字符的出现位置SQL Server 2008.所以,我不在乎A, B, C ... 8, 9, 0,但我确实在意!, @, &,,等等.

在我看来,最简单的方法就是排除A, B, C, ... 8, 9, 0,但如果我写了一个声明来排除这些,我会错过那些有!和的条目A.因此,在我看来,我必须获得每个非字母/非数字字符的列表,然后SELECT使用a LIKEWildcard限定符运行.

这是我要运行的:

SELECT Col1
FROM TABLE
WHERE Col1 LIKE ('!', '@', '#', '$', '%'....)
Run Code Online (Sandbox Code Playgroud)

但是,我不认为你可以运行多个限定符,可以吗?有没有办法可以做到这一点?

Dam*_*ver 30

否定者是你的朋友:

SELECT Col1
FROM TABLE
WHERE Col1 like '%[^a-Z0-9]%'
Run Code Online (Sandbox Code Playgroud)

这表示您希望任何行Col1包含任意数量的字符,然后一个字符不在集合a-Z0-9中,然后是任意数量的字符.

如果你有一个区分大小写的排序规则,这一点很重要,你使用包括大写和小写的范围A,a,Zz,这是我给什么(我本来它周围的错误的方式.a来之前A,Z自带之后z)


或者,换句话说,你可以把原作WHERE写成:

Col1 LIKE '[!@#$%]'
Run Code Online (Sandbox Code Playgroud)

但是,正如您所观察到的,您需要知道要包含在内的所有字符[].

  • @mikebmassey-`^`(作为[[]`中的第一个字符)表示“此范围内的任何*非*。`[]`块只能包含单个字符-您只需依次输入每个可能的字符。相当于`[^ aAbBcCdD .... yYzZ0123456789'`。如果您说`[^ aZ,0-9]`,那么您只允许`,`作为不会突出显示的另一个字符。 (3认同)

小智 7

以下 Transact SQL 脚本适用于所有语言(国际)。解决方案不是检查字母数字,而是检查是否不包含特殊字符。

DECLARE @teststring nvarchar(max)
SET @teststring = 'Test''Me'
SELECT 'IS ALPHANUMERIC: ' + @teststring
WHERE @teststring NOT LIKE '%[-!#%&+,./:;<=>@`{|}~"()*\\\_\^\?\[\]\'']%' {ESCAPE '\'}
Run Code Online (Sandbox Code Playgroud)

  • 这个问题是专门针对 SQL Server 提出的。+1 (2认同)