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

时间:2012-10-15 14:34:27

标签: sql-server

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

在我看来,最简单的方法是排除A, B, C, ... 8, 9, 0,但如果我写了一个语句来排除这些,我会错过!A的条目。所以,在我看来,我必须获得每个非字母/非数字字符的列表,然后使用SELECTLIKE限定符运行Wildcard

这是我要跑的:

SELECT Col1
FROM TABLE
WHERE Col1 LIKE ('!', '@', '#', '$', '%'....)

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

4 个答案:

答案 0 :(得分:28)

否定者是你的朋友:

SELECT Col1
FROM TABLE
WHERE Col1 like '%[^a-Z0-9]%'

其中说你想要Col1包含任意数量字符的任何行,然后在集合a-Z0-9中有一个字符,然后是任意数量的字符。

如果您使用区分大小写的排序规则,请务必使用包含大写和小写AaZz的范围,就是我给出的(原来我的方法是错误的。a来自AZ来自z


或者,换句话说,您可以将原始WHERE写为:

Col1 LIKE '[!@#$%]'

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

Select * from TableName Where ColumnName LIKE '%[^A-Za-z0-9, ]%'

这将为您提供包含任何特殊字符的所有行。

答案 3 :(得分:0)

select count(*) from dbo.tablename where address_line_1 LIKE '%[\'']%' {eSCAPE'\'}