SQL-每日一题【1517. 查找拥有有效邮箱的用户】

题目

表: Users

SQL-每日一题【1517. 查找拥有有效邮箱的用户】_第1张图片

编写一个解决方案,以查找具有有效电子邮件的用户。

一个有效的电子邮件具有前缀名称和域,其中:

  1.  前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线 '_' ,点 '.' 和/或破折号 '-' 。前缀名称 必须 以字母开头。
  2.  为 '@leetcode.com' 。

以任何顺序返回结果表。

结果的格式如以下示例所示:

示例 1:

SQL-每日一题【1517. 查找拥有有效邮箱的用户】_第2张图片

SQL-每日一题【1517. 查找拥有有效邮箱的用户】_第3张图片 

 

 

解题思路

前置知识

Regexpp()

模糊匹配,包含特定字符串

查找content字段中包含“车友俱乐部”的记录

select * from club_content where content regexp ‘车友俱乐部’

此时的regexp与like的以下用法是等同的

select * from club_content where content like ‘%车友俱乐部%’

模糊匹配,以特定字符串开头

查找content字段中以“车友”开头的记录

select * from club_content where content regexp ‘^车友’

此时的regexp与like的以下用法是等同的

select * from club_content where content like ‘车友%’

模糊匹配,以特定字符串结尾

查找content字段中以“车友”结尾的记录

select * from club_content where content regexp ‘车友$’

此时的regexp与like的以下用法是等同的

select * from club_content where content like ‘%车友’

模糊匹配,或关系

查找content字段中包含“心得”、“分享”或“技术贴”

select * from club_content where content REGEXP ‘心得|分享|技术贴’

模糊匹配,不包含单个字符

查找content字段中不包含“车”字、“友”字的记录

select * from club_content where content REGEXP [^车友]

这个结果跑出来一看大吃一惊,竟然把所有记录给跑出来,这是为什么呢?
因为一旦加了这个方括号"[]",它就把里面的内容拆成单个的字符再匹配,它会逐个字符去匹配判断是不是等于“车”,或者是不是等于“友“,返回的结果是一组0、1的逻辑值。

如果想匹配不包含特定字符串,该怎么实现呢?

模糊匹配,不包含特定字符串

查找content字段不包含“车友”字符串的记录

select * from club_content where content not REGEXP ‘车友’

1.题目要求我们 查找具有有效电子邮件的用户,也就是(前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线 '_' ,点 '.' 和/或破折号 '-' 。前缀名称 必须 以字母开头。 为 '@leetcode.com' 。)对于这种题我们可以采用正则表达式进行匹配。

2. ^ 匹配以该字符后面的字符开头的字符串,我们应该以字母开头(^[a-zA-Z]),可以包含字母(大写或小写),数字,下划线 '_' ,点 '.' 和/或破折号 '-'([a-zA-Z0-9_.-]*),*是一个量词,表示匹配前面的元素零次或多次。

3.必须以域结尾 为 '@leetcode.com',(@leetcode[.]com$),然后我们将三个条件组合在一起就得到了(regexp '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode[.]com$')这里要注意特殊符号的转义,如果我们将特殊符号放在[]中就不用再进行转义了,否则要在前面加上‘//’。

代码实现

select *
from Users
where mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode[.]com$'

测试结果

SQL-每日一题【1517. 查找拥有有效邮箱的用户】_第4张图片

你可能感兴趣的:(SQL每日一题,sql,数据库)