首先,如果这是一个重复的问题,我们深表歉意。我已尽力搜索但没有成功,而且我什至无法用关键字正确表达我的问题!
我的一个表有一列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 运算符,但可能有类似的东西。
关于SQL like - 选择包含未指定字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759825/