患某种疾病的患者
- 题目如下所示
个人题解
这题看起来需要做 MySQL 当中的字符串分割,难度很大。但是其实只使用一个LIKE
关键字就能解决,骚操作。以下为个人思考过程
-
-- 1. 建表 CREATE TABLE 1527_Patients( patient_id INT, patient_name VARCHAR(20), conditions VARCHAR(50), PRIMARY KEY(patient_id) ); -- conditions 表示 包含 0 个或以上的疾病代码,以空格分隔 -- 2. 编写 SQL,查询患有 I 类糖尿病的患者 ID ,患者姓名,以及其患有的所有疾病代码。I 类糖尿病的代码总是包含前缀 DIBA1 -- 这题题干说明 conditions 字段中的值以空格作为分隔符,MySQL 中如何做分割呢? -- 目前还不了解 -- SUBSTRING_INDEX(str,delim,count) SELECT SUBSTRING_INDEX(pa.conditions,' ', LENGTH(pa.conditions) - LENGTH(REPLACE(pa.conditions,' ','')) + 1) FROM 1527_Patients pa; -- ... 不会用 -- 难道说简单用 like 就可以?总感觉不对,因为前面也有可能是 ... ADIAB100 ...,很明显这个不对啊 SELECT pa.patient_id, pa.patient_name, pa.conditions FROM 1527_Patients pa WHERE pa.conditions LIKE '%DIAB1%'; -- 拿去试了一下,果然不行 -- 那只能去看大佬们的题解了 -- ............................... -- 巧用 like 关键字的 % SELECT pa.patient_id, pa.patient_name, pa.conditions FROM 1527_Patients pa WHERE pa.conditions LIKE 'DIAB1%' OR pa.conditions LIKE '% DIAB1%'; -- 这两个条件分别表示,conditions 当中 字符串以 DIAB1 开头,结果不管,第二个表示以空格作为分隔符后疾病的前缀