2026-07-06 05:01:14
在 SQL 中验证电子邮箱合法性可通过正则表达式实现,不同数据库需使用对应的正则函数或运算符,结合标准电子邮箱规则(如用户名@域名结构、字符限制等)进行匹配。 以下是具体实现方法:
一、电子邮箱合法性规则与正则表达式电子邮箱的通用规则为:
对应的正则表达式为:
^[a-zA-Z0-9]+[a-zA-Z0-9._-]*@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$使用 REGEXP_LIKE 函数(或其同义词 REGEXP/RLIKE):
SELECT email FROM test WHERE REGEXP_LIKE(email, '^[a-z0-9]+[a-z0-9._-]*@[a-z0-9.-]+.[a-z]{2,4}$', 'i');使用 REGEXP_LIKE 函数,语法与 MySQL 类似:
SELECT email FROM test WHERE REGEXP_LIKE(email, '^[a-z0-9]+[a-z0-9._-]*@[a-z0-9.-]+.[a-z]{2,4}$', 'i');使用正则运算符 ~*(不区分大小写)或 ~(区分大小写):
SELECT email FROM test WHERE email ~* '^[a-z0-9]+[a-z0-9._-]*@[a-z0-9.-]+.[a-z]{2,4}$';原生不支持正则表达式,需通过 CLR 集成创建自定义函数,或使用 LIKE 结合通配符进行简单匹配(但无法完全验证邮箱合法性)。
%_ 匹配用户名部分(至少1字符 + @)。
__%.__% 匹配域名部分(至少2字符 + . + 2-4字符)。
默认无正则支持,需通过以下方式实现:
LIKE 仅支持简单通配符(% 匹配任意字符,_ 匹配单字符),无法实现复杂规则验证。例如:
示例:以下查询会错误匹配非法邮箱 test@qq(缺少顶级域名):
SELECT email FROM test WHERE email LIKE '%@%';四、总结与建议MySQL/Oracle/PostgreSQL 直接支持正则,语法略有不同。
SQL Server/SQLite 需扩展或接受有限功能。
参考文档: