SQL Server 2008,搜索特殊字符

时间:2013-04-03 15:55:33

标签: sql sql-server sql-server-2008

我正在尝试查找已插入表中的一些错误数据。可能是某人从Word复制/粘贴然后插入数据库。

我见过类似的问题 Query for finding 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子句来指定要用作转义字符的字符,例如在哪里%_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 @。''?:/,+&(); _]%'

3 个答案:

答案 0 :(得分:3)

尝试

SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z @\.\-]%'

看起来你的版本上的 - 符号位置会导致问题。

答案 1 :(得分:1)

使用双底片

... WHERE email NOT LIKE '%[^0-9a-zA-Z ,-@\.]%'

样本数据也很有用

答案 2 :(得分:1)

据推测,每封电子邮件都有@个字符以及.。你可以试试:

SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z ,\]%'

如果您的原始列表是您真正想要的,那么您需要转义-

SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z ,\-@\.]%'