SQL Server 2008查询以查找列中包含非字母数字字符的行

Jay*_*Jay 33 sql sql-server non-alphanumeric

几周前我实际上是自己问过这个问题,而我确切知道如何使用SP或UDF进行此操作,但我想知道是否有一种快速简便的方法可以在没有这些方法的情况下执行此操作.我假设有,我找不到它.

我需要说的是,尽管我们知道允许哪些字符(az,AZ,0-9),但我们不想指定不允许的字符(#@!$ etc ...).此外,我们想要拉出具有非法字符的行,以便可以将其列出给用户进行修复(因为我们无法控制输入过程,因此我们无法在此处执行任何操作).

我之前看过SO和谷歌,但却无法找到任何符合我想要的东西.我已经看到很多例子可以告诉你它是否包含字母数字字符,或者没有,但是能够在查询表单中找不到的句子中提取撇号的东西.

请注意,此列中的值可以是null''(空)varchar.

bea*_*ach 62

这不会吗?

SELECT * FROM TABLE
WHERE COLUMN_NAME LIKE '%[^a-zA-Z0-9]%'
Run Code Online (Sandbox Code Playgroud)

建立

use tempdb
create table mytable ( mycol varchar(40) NULL)

insert into mytable VALUES ('abcd')
insert into mytable VALUES ('ABCD')
insert into mytable VALUES ('1234')
insert into mytable VALUES ('efg%^&hji')
insert into mytable VALUES (NULL)
insert into mytable VALUES ('')
insert into mytable VALUES ('apostrophe '' in a sentence') 

SELECT * FROM mytable
WHERE mycol LIKE '%[^a-zA-Z0-9]%'

drop table mytable 
Run Code Online (Sandbox Code Playgroud)

结果

mycol
----------------------------------------
efg%^&hji
apostrophe ' in a sentence
Run Code Online (Sandbox Code Playgroud)


Adr*_*der 8

Sql server对Regex的支持非常有限.您可以使用PATINDEX这样的东西

PATINDEX('%[a-zA-Z0-9]%',Col)
Run Code Online (Sandbox Code Playgroud)

看看PATINDEX(Transact-SQL)

搜索条件中的模式匹配

  • 如果你想使用PATINDEX,你需要做这样的事情:"SELECT*FROM mytable WHERE PATINDEX('%[^ a-zA-Z0-9]%',mycol)> 1" (6认同)