【力扣白嫖日记】SQL

前言

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

今日题目:

1527.患某种疾病的患者
表:Patients

列名 类型
patient_id int
patient_name varchar
conditions varchar

在 SQL 中,patient_id (患者 ID)是该表的主键。‘conditions’ (疾病)包含 0 个或以上的疾病代码,以空格分隔。这个表包含医院中患者的信息。

查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1 。

按 任意顺序 返回结果表。


我那不值一提的想法:

首先梳理表内容,题干一共给了一张把病人表,记录了病人的id,病人姓名,以及病人状况。其次分析需求,查询患有I类糖尿病患者的id,姓名,以及患有所有疾病的代码,其中前缀是DIAB1.我的第一想法就是用Like函数去匹配,每办法like用习惯了,然后还会用正则表达式去尝试一下。

selectpatient_id,patient_name,conditions
from Patients
where conditions like "%DIAB1%"

这是我开始的代码,但是对于conditions = "SADIAB100"的患者代码无法识别,这不是我们要的结果,我们希望DIAB1在前面或是在后面,而不是在单词的中间。那么如果DIAB1在后面的话,前面必须得有空格来隔开。所以得有两种情况:
1.DIAB1在所有单词前面:DIAB1%
2.DIAB1不在最前面:% DIAB1% #它的前面就必须要有空格隔开。

selectpatient_id,patient_name,conditions
from Patients
where conditions like "DIAB1%" or conditions like "% DIAB1%"

下面是正则表达式的方法:
依然是两种情况:
1.DIAB1在所有单词前面:^DIAB1.*
2.DIAB1不在最前面:.*\\sDIAB1.*

  • ^:表示以什么作为开头
  • .*:0个或多个任意字符
  • \s:代表空格,前面需要加\进行转义,也就是\s
select patient_id,patient_name,conditions
from Patients
where conditions rlike "^DIAB1.*" or conditions rlike ".*\\sDIAB1.*"

结果:

  • like
    【力扣白嫖日记】SQL_第1张图片
  • 正则表达式
    【力扣白嫖日记】SQL_第2张图片

总结:

能运行就行。


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