这个查询创建了一个mysql视图,在一个表中捕获错误的电子邮件地址格式,所以如果一行被插入到一个rtrrg.com
作为电子邮件,它将被记录在视图中,我的问题是,我如何使视图跟踪多个表,第二个表。
SQL
CREATE VIEW `invalid_emails` AS
select `table_with_email_column`.`email` AS `invalidemail`
from `table_with_email_column`
where ((locate(_latin1'', ltrim(rtrim(`table_with_email_column`.`email`))) <> 0)
or (left(ltrim(`table_with_email_column`.`email`), 1) = _latin1'@')
or (right(rtrim(`table_with_email_column`.`email`), 1) = _latin1'.')
or ((locate(_latin1'.', `table_with_email_column`.`email`,locate(_latin1'@', `table_with_email_column`.`email`)) - locate(_latin1'@', `table_with_email_column`.`email`)) <= 1)
or ((length(ltrim(rtrim(`table_with_email_column`.`email`))) - length(replace(ltrim(rtrim(`table_with_email_column`.`email`)), _latin1'@', _latin1''))) <> 1)
or (locate(_latin1'.', reverse(ltrim(rtrim(`table_with_email_column`.`email`)))) < 3)
or (locate(_latin1'.@', `table_with_email_column`.`email`) <> 0)
or (locate(_latin1'..', `table_with_email_column`.`email`) <> 0));
8条答案
按热度按时间lstz6jyr1#
您可以使用纯
SELECT
来验证电子邮件地址:现在,对于跟踪多个表的问题,可以使用逗号分隔的表名,对吗?
kx7yvsdv2#
为了正确验证电子邮件,您可以使用以下正则表达式:
b91juud33#
简单的
SELECT
语句就足够了,例如:此查询处理带有
+
符号的Gmail地址和主机为单个字母的地址。q8l4jmvw4#
你可以在
VIEW
中使用一个UNION
,但是你必须重复所有的WHERE
语句,这会给你冗余的代码。所以你应该创建一个帮助器VIEW
,它使你成为一个UNION
,然后应用WHERE
子句。此处演示:SQL Fiddle演示。
这将以某种方式应用于您的SQL,就像这样(未经测试);
是的,使用
regex
检查电子邮件地址的查询可以很容易地在互联网上到处找到,这进一步简化了它。lrl1mhuk5#
ao218c7q6#
r1zk6ea17#
使用MySQL 9,您现在可以创建一个check约束来验证存储在email address列中的所有数据。
kd3sttzy8#
我的解决方案找到无效的电子邮件: