【发布时间】:2013-09-12 08:58:41
【问题描述】:
首先,如果这是一个重复的问题,我们深表歉意。我已经尽力搜索但没有成功,我什至无法正确地用关键字来表达我的问题!
我的一张桌子有一列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 语句不匹配包含我想要的字符的 any 字符串,而是包含 only 想要的字符而不匹配其他任何内容的字符串?
【问题讨论】:
-
您使用的是什么 DBMS?
-
SQL 服务器,但我认为这不应该依赖于 DBMS。另外,我想我刚刚找到了一个解决方案,如果正确我会发布。