SQL Server - 搜索'字符通过[^ charlist]

时间:2018-01-11 14:18:11

标签: sql sql-server

我正在尝试查找列中包含不应包含在电子邮件地址中的字符的所有电子邮件地址(例如,)。下面的脚本正在运行,但是'字符也应该被过滤掉,但是我似乎无法将其添加到脚本中并使其余部分工作。

SELECT top 20 Email FROM users WHERE email LIKE '%[^-0-9a-zA-Z@.!#$%&*+-/=?^_`}{|~]%'

我尝试通过''\''添加它,但是当我这样做时,我开始获得包含我之前过滤掉的字符的结果(例如,带有+或{的电子邮件{1}} in,但没有不受欢迎的角色。)

非常感谢任何建议,谢谢。

1 个答案:

答案 0 :(得分:1)

我忽略了基础"如何验证电子邮件地址?"问题是因为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@.!#$%&*+-/=?^_`}{|~'']%' 

这里似乎没有必要逃脱。如果需要,可以对字符列表外部保留的%_字符使用可选的ESCAPE子句。 ^也被保留为字符列表中作为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 '\'

您可能会发现更明确地了解您尝试做什么,因此您可能会认为它更易于维护。但是,逃避并非绝对必要。