我正在尝试查找已插入表中的一些错误数据。可能是有人从 Word 复制/粘贴然后插入数据库。
我已经看到了类似的问题,例如 Query for find rows with special characters
但这并不适合我所需要的。本质上,我只想返回一个不包含任何标准字符的数据集并捕获诸如 endash 之类的东西(仅一个示例)。
我试过用这样的东西
SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z \-@\.]%'
但它会返回每一条记录。
编辑
以防它对以后出现的其他人有好处。最终,我遇到的问题是由于连字符 (-) 字符的放置,正如下面的 sgmoore 所指出的那样。我将它移到了我的范围的开头,就在非 (^) 字符之后。
此外,根据 gbn 提供的 LIKE 实际上并未使用正则表达式的信息,我在这里重新访问了 Microsoft 文档SQL Server LIKE Statement。由于我假设它与正则表达式相同,因此我不必要地使用反斜杠字符作为转义字符。这些是不必要的,显然只有通配符才需要转义字符。我链接的文档还提到在 LIKE 范围之后使用 ESCAPE 子句来指定要用作转义字符的字符,例如 WHERE percent_complete LIKE '%50!%' ESCAPE '!' 将匹配实际上以 50% (50%, 150%) 结尾的字符串。
这是我最终用来筛选我的电子邮件数据中的坏字符的方法;对我来说它有效,但它可能并不适用于所有情况。
SELECT * FROM mytable WHERE email LIKE '%[^-0-9a-zA-Z_@.]%'
如果它有帮助,我需要在其他几个通用文本字段上做类似的事情;这远非全面,但它将我的结果集缩小到只有少数记录,然后我能够直观地确定我在寻找什么。
SELECT * from mytable WHERE text_field LIKE '%[^-0-9a-zA-Z @.''?:/,+&();_]%'