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

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

b33aae47c47c4becb6fe0302f86efba9.png

1667. 修复表中的名字

9b4617abaecf44ac9bd0cae13eb4beb4.png

🚀 表: 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 below
select user_id,
concat(upper(left(name,1)),lower(substr(name,2))) name
from Users
order 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)) name
from Users
order by user_id
/* Write your PL/SQL query statement below */
select user_id "user_id",
initcap(name) "name"
from Users
order by 1


9b4617abaecf44ac9bd0cae13eb4beb4.png

1484. 按日期分组销售产品

1d925d97b04147d0a7881a0c6dbf80d6.png

🚀表 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 below
select 
    sell_date,
    count(distinct product) as num_sold,
    group_concat(distinct product) as products
from Activities
group 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 Activities
group by sell_date


1d925d97b04147d0a7881a0c6dbf80d6.png

1527. 患某种疾病的患者

00aa1c965f8642cc920f3d498d6dcf9f.png

🚀 患者信息表: 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 below
SELECT 
select * FROM Patients
WHERE 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次。
\ n n是1到9之间的数字。在遇到\ n之前匹配在()内找到的第n个子表达式。
[..]  匹配一个可以多于一个字符的整理元素。
[:] 匹配字符类。
[==]  匹配等价类。
\ d 匹配一个数字字符。
\ D 匹配一个非数字字符。
\ w 匹配包括下划线的任何单词字符。
\ W 匹配任何非单词字符。
\ s 匹配任何空白字符,包括空格,制表符,换页符等等。
\ S 匹配任何非空白字符。
\A  在换行符之前匹配字符串的开头或匹配字符串的末尾。
\Z  匹配字符串的末尾。
*?  匹配前面的模式零次或多次发生。
+?  匹配前面的模式一个或多个事件。
??  匹配前面的模式零次或一次出现。
{N}?  匹配前面的模式n次。
{N,}? 匹配前面的模式至少n次。
{N,M}?  匹配前面的模式至少n次,但不超过m次。

00aa1c965f8642cc920f3d498d6dcf9f.png

目录
相关文章
|
18天前
|
SQL
sql语句加正则 简化查询
sql语句加正则 简化查询
17 0
sql语句加正则 简化查询
|
7天前
|
SQL HIVE
【Hive SQL】字符串操作函数你真的会用吗?
本文介绍了SQL中判断字符串是否包含子串的几种方法。`IN`函数判断元素是否完全等于给定元素组中的某项,而非包含关系。`INSTR`和`LOCATE`函数返回子串在字符串中首次出现的位置,用于检测是否存在子串。`SUBSTR`则用于提取字符串的子串。`LIKE`用于模糊匹配,常与通配符配合使用。注意`IN`并非用于判断子串包含。
|
18天前
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
|
18天前
|
SQL 关系型数据库 MySQL
MYSQL数字函数实操宝典:场景化SQL语句一网打尽
本文作为MYSQL数字函数实操宝典,通过丰富的场景化SQL语句实例,一网打尽了MYSQL中常用的数字函数。我们深入探讨了ROUND函数在金额四舍五入、评分计算等场景的应用,展现了其在确保数据准确性和展示规范性方面的重要性。同时,FLOOR函数在分页处理、价格计算等实际案例中的灵活运用,也体现了其在向下取整方面的优势。此外,CEIL函数在分页处理、费用计算等方面的应用案例,充分展示了其向上取整的功能特点。这些实用案例不仅有助于读者更好地理解MYSQL数字函数的工作原理,更为开发者在实际开发中提供了有价值的参考
47 8
|
18天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
18天前
|
SQL 存储 Apache
在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
【2月更文挑战第16天】在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
242 2
|
SQL 存储 数据库
SQL Server函数与存储过程 计算时间
SQL Server函数与存储过程 计算时间 一、通过一个开始时间、结束时间计算出一个工作日天数(不包含工作日与节假日);   1、函数 --创建函数,参数 @bengrq 开始时间,@endrq 结束时间 create function [dbo].
1734 0
|
SQL 存储 Perl
PL/SQL函数和存储过程
前言 活到老,学到老。 基本概念 --ORACLE 提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。
1369 0