【发布时间】:2013-03-25 09:39:53
【问题描述】:
我正在尝试查找已插入表中的一些错误数据。可能是有人从 Word 中复制/粘贴然后插入到数据库中。
我见过类似的问题,例如 Query for finding rows with special characters
但这并不完全符合我的需要。本质上,我只想返回一个不包含任何标准字符的数据集并捕获诸如 endash 之类的东西(只是一个示例)。
我尝试过使用类似的东西
SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z \-@\.]%'
但它会返回每一条记录。
编辑
以防以后出现的其他人受益。最终,我遇到的问题是由于连字符 (-) 字符的放置,正如下面的 sgmoore 所指出的那样。我将它移到了我的范围的开头,就在非 (^) 字符之后。
另外,根据 gbn 提供的信息,LIKE 实际上并没有使用正则表达式,我在SQL Server LIKE Statement 重新访问了 Microsoft 文档。我不必要地使用反斜杠字符作为转义字符,因为我假设它与正则表达式相同。这些是不必要的,显然只有通配符才需要转义字符。我链接的文档还提到在 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 @.''?:/,+&();_]%'
【问题讨论】:
-
+1 对我来说这个问题似乎没问题 - 不知道为什么它被标记为 -1
-
@whytheq,谢谢,我不太清楚为什么我在这个问题上得到了如此多的反对票。显然,没有一个反对的选民愿意评论为什么:(
标签: sql sql-server sql-server-2008