查找与确切名称匹配的查询到邮件地址。 完全匹配的定义是名称是电子邮件地址的一部分时:
澄清我已准备好一些样本数据:
表名称
luis.sepulveda@gmail.com
johnn@mary.com
jeanne.darc@gmail.com
smith_anne@example.com
mary1999@mail.com
andrew@hotmail.com
表邮件
luis luis.sepulveda@gmail.com
anne smith_anne@example.com
mary mary1999@mail.com
andrew andrew@hotmail.com
查询应返回:
SELECT
不幸的是,带有LIKE
操作数的select name,address
from emails
join names on address like concat('%',name,'%');
会返回大量误报:
const response = await axios.get(your_url_here);
const items = response.data.items;
答案 0 :(得分:0)
您可以在电子邮件表的@
之前匹配名称和地址子字符
select name,address
from emails
join names
on SubString(address,1,POSITION('@' IN address)) like concat('%',name,'%');
答案 1 :(得分:0)
您似乎希望在 @
之前的电子邮件部分匹配(至少)。您可以使用substring_index()
或正则表达式处理此问题:
select n.name, e.address
from emails e join
names n
on substring_index(e.address, '@', 1 ) like concat('%', name, '%');
如果您正在尝试使用确切名称进行匹配,那么“anne”与“jeanne”不匹配,请考虑这些时期:
select n.name, e.address
from emails e join
names n
on concat('.', substring_index(e.address, '@', 1 ), '.') like concat('%.', name, '.%');
这不会捕获Anne,你可以使用正则表达式:
select n.name, e.address, concat('[^a-zA-Z]', name, '[^a-zA-Z].*@')
from emails e join
names n
on concat('.', e.address) regexp concat('[^a-zA-Z]', name, '[^a-zA-Z]?.*@')
答案 2 :(得分:0)
您可以使用substring_index
来执行此操作,在使用它时,我们将最后一个参数设置为1,因此它将从左到右获取子字符串
select name,address
from emails
join names on SUBSTRING_INDEX(address,'@',1) like concat('%',name,'%');
sqlfiddle是at here
答案 3 :(得分:0)
为了从@GordonLinoff开始的完整性我登陆到此查询,可能是重新计算但涵盖所有情况
select name,address
from emails e
join names on
lower(e.address) regexp concat('^(',name,'|[^a-z]*',name,'[^a-z]*' ,'|[^@]+[^a-z]+' ,name, '[^a-z@]*' ,'|[^@a-z]*' ,name, '[^a-z]+[^@]+' ,')@')