big*_*can 7 sql sql-server sql-server-2008
我正在尝试查找已插入表中的一些错误数据.可能是某人从Word复制/粘贴然后插入数据库.
我已经看到类似的问题,如 查询用于查找具有特殊字符的行
但这并不适合我需要的东西.基本上我只想返回一个不包括任何标准字符的数据集,并捕获诸如endash之类的东西(只是一个例子).
我试过用这样的东西
SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z \-@\.]%'
Run Code Online (Sandbox Code Playgroud)
但它会返回每一条记录.
如果它对以后出现的任何其他人都有好处.最终我遇到的问题是由于连字符( - )字符的位置,正如下面的sgmoore所指出的那样.我把它移到了我的范围的开头,就在not(^)字符之后.
另外,根据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 @.''?:/,+&(); _]%'
尝试
SELECT * FROM mytable WHERE email LIKE '%[^0-9a-zA-Z @\.\-]%'
Run Code Online (Sandbox Code Playgroud)
看起来您的版本上 - 符号的位置导致了问题。
| 归档时间: |
|
| 查看次数: |
22806 次 |
| 最近记录: |