第七回:似是而非

—— LIKE 与 通配符
👈 上一回:限制神通 🏠 回到大竹峰 下一回:身在其中 👉

我在山下遇到一个姑娘,只记得她名字里有个“灵”字,好像姓田,又好像不是...

哼,又是田灵儿吧?你这呆子,连名字都记不全,怎么查?

记不全也不怕。用 LIKE 配合通配符 (Wildcards),便可模糊搜索。

🌫️ 雾里看花:LIKE

📜 模糊心法

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

常用通配符有二:

🧘‍♂️ 试炼一:百分号 (%)

寻找所有姓“张”的弟子:

SELECT * FROM Disciples WHERE Name LIKE '张%';

结果: 张小凡, 张日山, 张三丰...

寻找名字里带“灵”字的(不管在开头、中间还是结尾):

SELECT * FROM Disciples WHERE Name LIKE '%灵%';

结果: 田灵儿, 水月大师(假), 灵尊

🧘‍♂️ 试炼二:下划线 (_)

寻找名字是三个字,且中间是“小”字的弟子:

SELECT * FROM Disciples WHERE Name LIKE '_小_';

结果: 张小凡, 王小二

🕵️‍♂️ 进阶侦查

📜 字符集 ([charlist])

SQL ServerSQLite 中,你可以指定一个字符范围。

-- 寻找姓“张”、“李”或“王”的弟子 SELECT * FROM Disciples WHERE Name LIKE '[张李王]%';

注意: MySQL 默认不支持这个,得用正则表达式 REGEXP

📜 破除幻术 (Escape)

如果我要找的人,名字里真的带了 % 或者 _ 怎么办?比如“95%纯金法宝”。

这时候需要用转义符 (Escape Character)

-- 寻找包含 '50%' 的描述 SELECT * FROM Treasures WHERE Description LIKE '%50!%%' ESCAPE '!';

解义: 我们定义 ! 为转义符,所以 !% 就被当作普通的百分号字符,而不是通配符。

那如果我想找不姓“田”的人呢?

加上 NOT 即可。

SELECT * FROM Disciples WHERE Name NOT LIKE '田%';