[英]SQL like - select strings that contain unspecified characters
首先,很抱歉,如果这是一个重复的问题。 我已经竭尽全力进行搜索,但是没有成功,而且我什至无法正确地用关键词表达我的问题!
我的一张桌子有一列Name (nvarchar)
。 我想找出哪些行包含特殊字符, 而无需明确列出这些字符。 在我的情况下,“特殊”字符表示不在以下内容中的任何内容:
a-z A-Z 0-9 _ @ . , ( ) % + -
因此,例如:
Row 1: 'asdf Asdf 0123'
Row 2: 'asdf (Asdf) 012/3'
Row 3: 'zxcv [234]'
Row 4: 'asdf #0123'
我想选择第2、3和4行。
最简单的方法是包括不需要的字符,例如方括号和斜杠:
SELECT * FROM Table
WHERE Name LIKE '%[\]\[/]%' ESCAPE '\'
这将返回第2行和第3行,或者如果我使用NOT LIKE,则返回第1行和第4行。但是,我还想找到其他我可能没有想到的字符(例如#)。 列出所需的字符-
SELECT * FROM Table
WHERE Name NOT LIKE '%[a-zA-Z0-9_@. ,()%+-]%'
也不起作用,因为它返回0个结果,因为所有行都至少包含这些字符中的1个。
有没有一种方法可以限制后面的LIKE语句不匹配包含我想要的字符的任何字符串,而是匹配仅包含想要的字符而没有其他内容的字符串?
在MySQL中,您可以执行以下操作:
WHERE Name REGEX '[^-a-zA-Z0-9.,()%+]'
不知道SQL Server中是否存在相同的REGEX运算符,但它可能具有相似的含义。
SELECT * FROM tblWHERE PATINDEX('%[^a-zA-Z0-9]%',col) >1
应该返回具有非字母数字字符的行。 您可能需要根据您的特定需求更改正则表达式。
use tempdb
create table tbl ( col varchar(40) NULL)
insert into tbl VALUES ('lowercase')
insert into tbl VALUES ('UPPER')
insert into tbl VALUES ('0123')
insert into tbl VALUES ('special characters & ^')
insert into tbl VALUES ('special characters ! \/')
insert into tbl VALUES ('special characters _ + = ')
insert into tbl VALUES (NULL)
SELECT * FROM tbl WHERE PATINDEX('%[^a-zA-Z0-9]%',col) >1
drop table tbl
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.