【力扣白嫖日记】SQL

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

1517.查找拥有有效邮箱的用户
表:Users

列名 类型
user_id int
name varchar
mail varchar

user_id 是该表的主键(具有唯一值的列)。该表包含了网站已注册用户的信息。有一些电子邮件是无效的。

编写一个解决方案,以查找具有有效电子邮件的用户。
一个有效的电子邮件具有前缀名称和域,其中:

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

以任何顺序返回结果表。


我那不值一提的想法:

首先梳理表内容,题干给了一张用户表,记录了用户id,姓名,邮箱,其次分析需求,需要找到有效的电子邮箱,其中有效的电子邮箱前缀是一个字符串,我的第一个想法是用like将其连接起来,但实际上运行不出来结果,看了题解发现我们需要用到正则表达式,也就是用regexp或者是rlike来匹配正则表达式。

  • 正则表达式的相关功能
    • ^ :表示一个字符串的开头
    • []:表示其中的任意字符范围
    • $:表示一个字符串或行的结尾
    • \ :但实际在SQL的正则表达式中有的特殊符号需要加两条\才能正确转义,比如.,题干中加\不行,得加\
    • *:表示重复前面字符任意次数

这道题整体邮箱就三个部分:
1.以字母开头 [^a-zA-z]
2.字母或是数字或是".“,”_“,”-"作为中间的字符串,因为这三个符号在SQL里面都有特殊用途,所以需要加上\对其进行转义,显示字符原本的样子。[a-zA-z0-9\\.\\-\\_]*
3.以@leetcode结尾。@leetcode\\.com$

select user_id,name,mail
from Users
where mail rlike "^[a-zA-Z][a-zA-Z0-9\\_\\-\\.]*@leetcode\\.com$"

结果:

【力扣白嫖日记】SQL_第1张图片

总结:

能运行就行。


你可能感兴趣的:(leetcode,sql,数据库)