我正在尝试查找已插入表中的一些错误数据。可能是某人从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 @。''?:/,+&(); _]%'
答案 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 ,\-@\.]%'