> 文档中心 > 【LeetCode-SQL专项突破】-第3天:字符串处理函数/正则

【LeetCode-SQL专项突破】-第3天:字符串处理函数/正则


📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 1667. 修复表中的名字
    • 1484. 按日期分组销售产品
    • 1527. 患某种疾病的患者

前言

SQL每个人都要用,但是用来衡量产出的并不是SQL本身,你需要用这个工具,去创造其它的价值。


【LeetCode-SQL专项突破】-第3天:字符串处理函数/正则

1667. 修复表中的名字

🚀 表: Users+----------------+---------+| Column Name    | Type    |+----------------+---------+| user_id | int     || name    | varchar |+----------------+---------+user_id 是该表的主键。该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。🚀 需求编写一个 SQL 查询来修复名字,使得只有第一个字符是大写的,其余都是小写的。返回按 user_id 排序的结果表。查询结果格式示例如下。示例 1:输入:Users table:+---------+-------+| user_id | name  |+---------+-------+| 1| aLice || 2| bOB   |+---------+-------+输出:+---------+-------+| user_id | name  |+---------+-------+| 1| Alice || 2| Bob   |+---------+-------+🐴🐴 答案# Write your MySQL query statement belowselect user_id,concat(upper(left(name,1)),lower(substr(name,2))) namefrom Usersorder by user_id/* Write your T-SQL query statement below */select user_id,UPPER(substring(name,1,1))+LOWER(substring(name,2,len(name)-1)) namefrom Usersorder by user_id/* Write your PL/SQL query statement below */select user_id "user_id",initcap(name) "name"from Usersorder by 1

【LeetCode-SQL专项突破】-第3天:字符串处理函数/正则

1484. 按日期分组销售产品

🚀表 Activities:+-------------+---------+| 列名  | 类型    |+-------------+---------+| sell_date   | date    || product     | varchar |+-------------+---------+此表没有主键,它可能包含重复项。此表的每一行都包含产品名称和在市场上销售的日期。🚀 需求编写一个 SQL 查询来查找每个日期、销售的不同产品的数量及其名称。每个日期的销售产品名称应按词典序排列。返回按 sell_date 排序的结果表。查询结果格式如下例所示。 示例 1:输入:Activities 表:+------------+-------------+| sell_date  | product     |+------------+-------------+| 2020-05-30 | Headphone   || 2020-06-01 | Pencil      || 2020-06-02 | Mask || 2020-05-30 | Basketball  || 2020-06-01 | Bible|| 2020-06-02 | Mask || 2020-05-30 | T-Shirt     |+------------+-------------+输出:+------------+----------+------------------------------+| sell_date  | num_sold | products|+------------+----------+------------------------------+| 2020-05-30 | 3 | Basketball,Headphone,T-shirt || 2020-06-01 | 2 | Bible,Pencil   || 2020-06-02 | 1 | Mask    |+------------+----------+------------------------------+解释:对于2020-05-30,出售的物品是 (Headphone, Basketball, T-shirt),按词典序排列,并用逗号 ',' 分隔。对于2020-06-01,出售的物品是 (Pencil, Bible),按词典序排列,并用逗号分隔。对于2020-06-02,出售的物品是 (Mask),只需返回该物品名。🐴🐴 答案# Write your MySQL query statement belowselect     sell_date,    count(distinct product) as num_sold,    group_concat(distinct product) as productsfrom Activitiesgroup by sell_date/* Write your T-SQL query statement below */SELECT STUFF((SELECT ','+product FROM Activities for xml path('')),1,1,'') /* Write your T-SQL query statement below */select sell_date,count(distinct product) as num_sold,stuff((select distinct ','+product from Activities a where a.sell_date=b.sell_date for xml path('')),1,1,'') AS products from Activities b group by sell_date/* Write your PL/SQL query statement below */select     sell_date "sell_date",    count(distinct product) as "num_sold",    wm_concat(distinct product) as "products"from Activitiesgroup by sell_date

【LeetCode-SQL专项突破】-第3天:字符串处理函数/正则

1527. 患某种疾病的患者

🚀 患者信息表: Patients+--------------+---------+| Column Name  | Type    |+--------------+---------+| patient_id   | int     || patient_name | varchar || conditions   | varchar |+--------------+---------+patient_id (患者 ID)是该表的主键。'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。这个表包含医院中患者的信息。写一条 SQL 语句,查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1 。按 任意顺序 返回结果表。查询结果格式如下示例所示。 🚀 需求示例 1:输入:Patients表:+------------+--------------+--------------+| patient_id | patient_name | conditions   |+------------+--------------+--------------+| 1   | Daniel| YFEV COUGH   || 2   | Alice ||| 3   | Bob   | DIAB100 MYOP || 4   | George| ACNE DIAB100 || 5   | Alain | DIAB201      |+------------+--------------+--------------+输出:+------------+--------------+--------------+| patient_id | patient_name | conditions   |+------------+--------------+--------------+| 3   | Bob   | DIAB100 MYOP || 4   | George| ACNE DIAB100 | +------------+--------------+--------------+解释:Bob 和 George 都患有代码以 DIAB1 开头的疾病。🐴🐴 答案# Write your MySQL query statement belowSELECT select * FROM PatientsWHERE conditions REGEXP '^DIAB1|\\sDIAB1'/* Write your PL/SQL query statement below */select  patient_id "patient_id", patient_name "patient_name", conditions  "conditions" from Patients where regexp_like(conditions,'^DIAB1|\ s*DIAB1') 以下为Oracle的正则表达式^匹配一个字符串的开始。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的开头。$匹配字符串的结尾。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的末尾。*匹配零个或多个。+匹配一个或多个出现。?匹配零次或一次出现。。匹配任何字符,除了空。|用“OR”来指定多个选项。[]用于指定一个匹配列表,您尝试匹配列表中的任何一个字符。[^]用于指定一个不匹配的列表,您尝试匹配除列表中的字符以外的任何字符。()用于将表达式分组为一个子表达式。{M}匹配m次。{M,}至少匹配m次。{M,N}至少匹配m次,但不多于n次。\ nn是1到9之间的数字。在遇到\ n之前匹配在()内找到的第n个子表达式。[..]匹配一个可以多于一个字符的整理元素。[:]匹配字符类。[==]匹配等价类。\ d匹配一个数字字符。\ D匹配一个非数字字符。\ w匹配包括下划线的任何单词字符。\ W匹配任何非单词字符。\ s匹配任何空白字符,包括空格,制表符,换页符等等。\ S匹配任何非空白字符。\A在换行符之前匹配字符串的开头或匹配字符串的末尾。\Z匹配字符串的末尾。*?匹配前面的模式零次或多次发生。+?匹配前面的模式一个或多个事件。??匹配前面的模式零次或一次出现。{N}?匹配前面的模式n次。{N,}?匹配前面的模式至少n次。{N,M}?匹配前面的模式至少n次,但不超过m次。

【LeetCode-SQL专项突破】-第3天:字符串处理函数/正则
体系化学习SQL,请关注CSDN博客
https://blog.csdn.net/weixin_41645135/category_11653817.html

在这里插入图片描述