[每日一练]MySQL的模糊匹配和正则表达式来查找开头的特殊字符

news2024/9/20 10:51:46

#改题目来源于力扣:

1527. 患某种疾病的患者 - 力扣(LeetCode)

题目要求:

患者信息表: Patients

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| patient_id   | int     |
| patient_name | varchar |
| conditions   | varchar |
+--------------+---------+
在 SQL 中,patient_id (患者 ID)是该表的主键。
'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。
这个表包含医院中患者的信息。
 

查询患有 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 开头的疾病。

思路流程:

1.由此可见,我们需要返回字符串是以前缀“DIAB1”的所有患者,这时候可以利用正则表达式进行匹配:

\\bDIAB1

其中\b表达匹配单词边界,放在字符串前可以匹配以这个字符串开头的字符串,放在字符串后可以匹配以这个字符串结尾的字符串,放在两边表示只匹配这个字符串。\\b表示对\b进行转义。

2.当然,我们可以利用MySQL的模糊匹配进行查找。%作为通配符,和正则表达式里的\b有区别:

  • %字符串:匹配以“字符串”结尾的记录。
  • 字符串%:匹配以“字符串”开头的记录。
  • %字符串%:匹配包含“字符串”的记录。

在这里,我们可以发现以DIAB1开头的情况有两种,一种是DIAB1位于字符串首位,一种是DIAB1位于总字符串中间,被空格隔开了,所以它的开头有一个空格,利用模糊匹配要考虑到所有情况,比正则表达式难一些。

"DIAB1%" OR "% DIAB1%"
#以“DIAB1”开头的字符串以及包含“ DIAB1”的字符串

代码实现:

# Write your MySQL query statement below
SELECT * 
FROM Patients
WHERE conditions REGEXP '\\bDIAB1'

 或者:

SELECT *
FROM Patients
WHERE conditions LIKE "DIAB1%" OR conditions LIKE "% DIAB1%"

题后思考:

既然要表达开头,为什么不可以用'^DIAB1'而是用''\\bDIAB1'?

因为“^”符号表达的开头匹配,必须且只能在最前面才可以,而题目中所谓的“开头”DIAB1,有时候会在第二个字符串里,不再最前方第一个字符串的开头,造成BUG.

而\b表达的是字符串的边界,即如果把\b放在DIAB1之前,不管DIAB1在第几个字符串,只要是以它开头就都会匹配到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

imo云办公室 Imo_DownLoadUI.php 任意文件下载漏洞复现

0x01 漏洞描述: imo云办公室由上海易睦网络科技有限公司于2007年创立,总部位于上海,imo云办公室管理运营企业即时通讯平台imo,包括对imo的在线支持,故障处理,客户服务等,对imo进行持续研发&…

第五届“马栏山杯”国际音视频算法大赛创新应用赛投票环节正式启动啦!

本次大赛分为专业奖和大众人气奖。专业奖由评委直接选出。大众人气奖经组委会初筛后选出62组优秀作品,由网络投票选出40名获奖选手! 快快戳链接🔗:https://h5.shuziwenbo.cn/challenge/vote?cxidedcrfv看看自己的作品有没有入选吧…

【AI视频】Runway Gen-2:图文生视频与运动模式详解

博客主页: [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 💯前言💯仅图片生成视频方法一:通过Midjourney生成图片方法二:通过Runway预览生成图片注意点 💯图加文生成视频方式一:Midjourney…

Web端云剪辑解决方案,BS架构私有化部署,安全可控

传统视频制作流程繁琐、耗时,且对专业设备和软件的高度依赖,常常让企业望而却步,美摄科技凭借其强大的技术实力和创新能力,推出了面向企业用户的Web端云剪辑解决方案,为企业提供一站式、高效、便捷的视频生产平台。 B…

计算机考研408-计算机网络

【题33】下列选项中,不属于网络体系结构所描述的内容是() A.网络的层次 B.每一层使用的协议 C.协议的内部实现细节 D.每一层必须完成的功能 解析: 本题考查的是网络体系结构相关的概念。 图1描述了网络的7层架构以及每一层所要完成…

无人机 PX4 飞控 | EKF 使用传感器汇总与添加传感器方法

无人机 PX4 飞控 | EKF 使用传感器汇总与添加传感器方法 前言飞控自带基本传感器IMU磁力计气压计静态气压位置误差校正气压计偏压补偿 高度传感器测距仪使能测距仪融合有条件 可额外配置的传感器光流外部视觉系统 新传感器确定传感器类型和接口更新硬件定义添加驱动更新EKF 前言…

MySQL:事务的ACID特性隔离级别脏读、不可重复读、幻读、Next-Key锁——场景复现

目录 1、什么是事务 2、 事务的ACID特性 2.1 事务的隔离性 3、为什么要使用事务? 4、查看支持事务的存储引擎 5、使用事务 5.1 控制事务 5.1.1 开启事务 5.1.2 关闭事务 5.2 开始一个事务,执行修改后回滚 5.3 开始一个事务,执行修…

观后感:《中国数据库前世今生》——时代变迁中的数据库崛起

最近观看了《中国数据库前世今生》纪录片,这部影片详细梳理了从1980年代至今,中国数据库技术发展的跌宕历程。作为一名程序员,这部纪录片让我不禁感慨数据库技术的飞速进步,也让我更深入地理解了数据库技术在我们日常生活中的重要…

如何借助项目管理系统实现审批流程的自动化与标准化?

在快节奏的项目申报领域中,繁琐的审批流程往往成为制约项目推进速度的瓶颈。传统的人工审批方式不仅耗时耗力,还容易因人为因素导致审批效率低下、结果不一致等问题。为此,一款能够支持在线审批流程、实现审批自动化与标准化的项目管理系统显…

Canal+RabbitMQ数据同步环境配置

Canal 是阿里巴巴开发的开源工具,主要用于解析 MySQL 的 binlog 日志,从而实现数据同步。Canal 会模拟 MySQL 从库的协议,订阅主库的 binlog,从而获取数据库的变更信息。 将 Canal 解析到的 MySQL 数据库变更消息通过 RabbitMQ 分…

算法打卡 Day34(贪心算法)-分发饼干 + 摆动序列 + 最大子序和

文章目录 理论基础Leetcode 455-分发饼干题目描述解题思路类似题目2410-运动员和训练师的最大匹配数 Leetcode 376-摆动序列题目描述解题思路 Leetcode 53-最大子序和题目描述解题思路 理论基础 贪心算法的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心算…

力扣718-最长重复子数组(Java详细题解)

题目链接:718. 最长重复子数组 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5…

【CMake】使用CMake在Visual Studio内构建多文件夹工程

一、配置准备 打开VIsual Studio,载入写好的 C M a k e l i s t s . t x t CMakelists.txt CMakelists.txt,在项目中添加以下文件: 创建一个文件夹 f u n c s funcs funcs,里面放入 f u n c . h func.h func.h、 f u n c . c p …

fmql之驱动程序编写(首次)

看了正点原子的zynq系列的Linux开发指南(pdf和视频均有),因此从最简单的程序开始。 驱动程序开发:(第四期视频) 第3.1讲 我的第一个Linux驱动-字符设备驱动框架_哔哩哔哩_bilibili 学习驱动程序编写之前&am…

【论文串烧】多媒体推荐中的模态平衡学习 | 音视频语音识别中丢失导致的模态偏差对丢失视频帧鲁棒性的影响

文章目录 一、多媒体推荐中的模态平衡学习1.1 研究背景1.2 解决问题1.3 实施方案1.4 文章摘要1.5 文章重点1.6 文章图示图 1:不同模型变体在 AmazonClothing 数据集上的初步研究图 2:CKD模型架构的说明图 3:在 Amazon-Clothing 数据集上训练过…

【Linux:共享内存】

共享内存的概念: 操作系统通过页表将共享内存的起始虚拟地址映射到当前进程的地址空间中共享内存是由需要通信的双方进程之一来创建但该资源并不属于创建它的进程,而属于操作系统 共享内存可以在系统中存在多份,供不同个数,不同进…

Qt窗口——QStatusBar

文章目录 状态栏状态栏创建状态栏显示临时消息状态栏添加子控件 状态栏 QStatusBar状态栏是应用程序中输出简要信息的区域,例如画图板下面的区域 我们也可以给程序设置状态栏,表示一些状态。 状态栏创建 使用Qt Creator创建项目的时候,如果…

实现一种可插拔的参数校验

1、概述 仿照mybatis的二级缓存的实现方式,使用“策略模式配置” 的方式实现一个可动态插拔的 参数校验,便于后期扩展。 实现方式也很简单,首先定义一个校验接口,并提供一个校验方法;每种参数校验都是实现 了该校验接口…

前端vue-实现富文本组件

1.使用wangeditor富文本编辑器 工具网站&#xff1a;https://www.wangeditor.com/v4/ 下载安装命令&#xff1a;npm i wangeditor --save 成品如下图&#xff1a; 组件实现代码 <template><div><!-- 富文本编辑器 --><div id"wangeditor">…

Recbole安装指南:步骤详解与常见问题解决方案

1.两种方式&#xff1a; 从Conda安装 如果你还没有安装Conda&#xff0c;可以安装Miniconda或完整的Anaconda。 如果你在中国大陆&#xff0c;我们推荐你使用清华镜像安装Conda。 当你完成Conda的安装后&#xff0c;你可以将RecBole安装在python 3.7的Conda环境中&#xff0…