之前介绍的过滤方法均是面对已知值的,当我们需要检出未知值的数据便显得不够用,比如选出名称中带有bag的所有产品等。
这篇博文会介绍如何通过通配符进行过滤。
通配符: 用于匹配值的一部分的特殊字符
搜索模式: 由字面值、通配符或两者构成的搜索条件 ,类似于正则表达式
1. 百分号(%)通配符
百分号(%)通配符是最常使用的通配符,在搜索串中,百分号表示任意数量的任意字符。
例如:
选出所有产品名以Fish开头的产品的ID:
SELECT prod_id
From Products
WHERE prod_name LIKE 'Fish%';
其中LIKE是一种操作符,表示与后跟的搜索模式匹配。
选出产品名包含Fish的产品的ID:
SELECT prod_id
From Products
WHERE prod_name LIKE '%Fish%';
根据部分信息搜索邮件地址:
SELECT email
From Emails
WHERE email LIKE 'b%@outlook.com';
注意:
- %通配符可以匹配0、1、多个字符,但是不能匹配NULL
- 搜索模式区分大小写
- Microsoft Access使用*而不是%
- 许多DBMS会用空格填补字段的内容,比如某列有五十字符,但存储的文本只有17个字符,剩下的都用空格来填补,此时我们需要对搜索模式进行修改,或者使用函数去掉空格
2. 下划线(_)通配符
下划线(_)通配符的作用为匹配任意单个字符。
例如:匹配所有大小为两位数的玩具熊
SELECT prod_id
From Products
WHERE prod_name LIKE '__ inch teddy bear';
_只能刚好匹配一个字符,不能多也不能少。
方括号([])通配符(只有Mircoss Access和SQL server支持)
方括号([])通配符用于指定一个字符集,必须匹配字符集中的其中一个字符。
示例:
1, 检索出所有名字以F或M开头的用户的用户名
SELECT prod_id
From Products
WHERE prod_name LIKE '[JM]%';
2, 检索出所有名字不是以F或M开头的用户的用户名
SELECT prod_id
From Products
WHERE prod_name LIKE '[!JM]%';
其中在有些DMBS中可以将!替换为^,或者使用NOT子句。
注意:
- 不要过度使用通配符,能不用就不用
- 有必要使用通配符时,尽量不要放在搜索模式的开始处
- 仔细注意通配符的位置
总而言之,通配符是一种极其有用且重要的搜索工具,应善加利用。
参考:《SQL必知必会》