我在山下遇到一个姑娘,只记得她名字里有个“灵”字,好像姓田,又好像不是...
哼,又是田灵儿吧?你这呆子,连名字都记不全,怎么查?
记不全也不怕。用 LIKE 配合通配符 (Wildcards),便可模糊搜索。
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
常用通配符有二:
寻找所有姓“张”的弟子:
SELECT * FROM Disciples
WHERE Name LIKE '张%';
结果: 张小凡, 张日山, 张三丰...
寻找名字里带“灵”字的(不管在开头、中间还是结尾):
SELECT * FROM Disciples
WHERE Name LIKE '%灵%';
结果: 田灵儿, 水月大师(假), 灵尊
寻找名字是三个字,且中间是“小”字的弟子:
SELECT * FROM Disciples
WHERE Name LIKE '_小_';
结果: 张小凡, 王小二
在 SQL Server 或 SQLite 中,你可以指定一个字符范围。
-- 寻找姓“张”、“李”或“王”的弟子
SELECT * FROM Disciples
WHERE Name LIKE '[张李王]%';
注意: MySQL 默认不支持这个,得用正则表达式 REGEXP。
如果我要找的人,名字里真的带了 % 或者 _ 怎么办?比如“95%纯金法宝”。
这时候需要用转义符 (Escape Character)。
-- 寻找包含 '50%' 的描述
SELECT * FROM Treasures
WHERE Description LIKE '%50!%%' ESCAPE '!';
解义: 我们定义 ! 为转义符,所以 !% 就被当作普通的百分号字符,而不是通配符。
那如果我想找不姓“田”的人呢?
加上 NOT 即可。
SELECT * FROM Disciples
WHERE Name NOT LIKE '田%';