我正在尝试在包含不应在电子邮件地址中出现的字符的列中查找所有电子邮件地址(例如, )。下面的脚本工作正常,但是'字符也应该被过滤掉,但是我似乎不能把它放到脚本中,并让它的其余部分工作。
SELECT top 20 Email FROM users WHERE email LIKE '%[^-0-9a-zA-Z@.!#$%&*+-/=?^_`}{|~]%'我尝试通过''和\''添加它,但当我这样做时,我开始得到包含我之前过滤掉的字符的结果(例如,带有+或. in的电子邮件,但没有不需要的字符)。
任何建议都将不胜感激,谢谢。
发布于 2018-01-11 23:13:26
我忽略了潜在的“如何验证电子邮件地址?”问题是因为that's a religious issue。
这对我来说很有效:
SELECT *
FROM (VALUES ('''john@example.com'''), ('frank^@example.com'), ('ali%ce@example.com'),('bo\b@example.com')) x (email)
WHERE email LIKE '%[^-0-9a-zA-Z@.!#$%&*+-/=?^_`}{|~'']%' 这里似乎没有必要进行转义。如果愿意,可以对保留在字符列表之外的%和_字符使用可选的转义子句。^还保留为字符列表中的第一个字符作为NOT指示符,因此您可能也希望转义该字符:
SELECT *
FROM (VALUES ('''john@example.com'''), ('frank^@example.com'), ('ali%ce@example.com'),('bo\b@example.com')) x (email)
WHERE email LIKE '%[^-0-9a-zA-Z@.!#$\%&*+-/=?\^\_`}{|~'']%' ESCAPE '\'您可能会发现这更清楚地说明了您要做什么,因此您可能会认为它更易于维护。然而,这种转义并不是绝对必要的。
https://stackoverflow.com/questions/48209174
复制相似问题