【SQL】特定字符串检索

目录

语法

需求

示例

分析

代码


语法

xxx like 语句用于在WHERE子句中搜索特定模式的字符串。这里的xxx是表中的一个列名,而like后面跟着的是要匹配的模式,模式中可以包含通配符来代表任意数量的字符。

最常见的通配符有两个:

  • %:代表零个、一个或多个字符。
  • _:代表单个字符。

当使用LIKE进行模糊匹配时,性能可能会受到影响,特别是当在大型数据集上执行且没有适当的索引时。在某些数据库系统中,如果xxx列包含NULL值,并且试图使用LIKE来搜索这些值,那么这些NULL值将不会被匹配,因为NULL表示“未知”或“无值”,而不是空字符串或任何特定的文本值。要包括NULL值,可能需要使用IS NULL条件或COALESCE函数等策略。

在SQL中,要实现检索特定字符串也可以通过regexp,这是一个强大的字符串匹配函数,它使用正则表达式(Regular Expressions)来搜索和匹配字符串模式。正则表达式是一种文本模式,包括普通字符(如字母a到z)和特殊字符(称为“元字符”),这些特殊字符定义了字符的搜索模式。
 

需求

患者信息表: 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 。

示例

输入:
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 开头的疾病。

分析

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

需要检索特定的含有DIAB1字符串的内容,考虑like语句或者regexp语句,这两种均可检索指定的字符串

like语句实现检索含有DIAB1字符串

conditions列含有DIAB1的字符串存在两种情况,一种是DIAB1在首位,那么 'DIAB1%'即可指代这类字符串

另一种是DIAB1在中间或末位,同时需要避免DDIAB1等其他代码相似的疾病,通过'% DIAB1%'指代这类字符串

where conditions like 'DIAB1%' or conditions like '% DIAB1%'

regexp语句实现检索含有DIAB1字符串

在正则表达式中,\\bDIAB1 表示匹配以 DIAB1 开头且前面是单词边界的字符串。可以一次处理上述两种情况

where conditions regexp '\\bDIAB1'

代码

select * 
from Patients 
where conditions like 'DIAB1%' or conditions like '% DIAB1%'

OR

select patient_id, patient_name, conditions
from Patients
where conditions regexp '\\bDIAB1'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_D_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值