我正在尝试定位插入表中的一些坏数据,很可能是由于某人从Word复制/粘贴然后插入到数据库中造成的。
我看过类似的问题,比如查找仅包含特殊字符的行的查询,但这并不完全符合我的需求。本质上,我只想返回一个数据集,其中不包括任何标准字符,并捕获诸如endash(仅举一个例子)之类的内容。
我尝试使用类似于以下代码:
我看过类似的问题,比如查找仅包含特殊字符的行的查询,但这并不完全符合我的需求。本质上,我只想返回一个数据集,其中不包括任何标准字符,并捕获诸如endash(仅举一个例子)之类的内容。
我尝试使用类似于以下代码:
SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z \-@\.]%'
但它会返回每一条记录。
编辑
如果对其他人有帮助,最终我遇到的问题是由于连字符(-)字符的位置导致的,正如sgmoore在下面指出的那样。我将其移动到范围的开头,紧随not (^)字符。
此外,根据gbn提供的信息,LIKE实际上并没有使用正则表达式,因此我重新访问了Microsoft文档SQL Server LIKE语句。我不必要地使用反斜杠字符作为转义字符,因为我假设它与正则表达式相同。这些是不必要的,显然通配符字符只需要转义字符。我链接的文档还提到,在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 @.''?:/,+&();_]%'