6.1 LIKE 操作符
6.1.1 百分号?%?通配符
检索任意以Fish开头的词不过后面有多少。
1 SELECT prod_id, prod_name
2 FROM Products
3 WHERE prod_name LIKE 'Fish%';
4
5 /*
6 在执行这条子句时,将检索任意以Fish开头的词不管后面是什么。
7 */
表示文本中含有"bean bag"
1 SELECT prod_id, prod_name
2 FROM Products
3 WHERE prod_name LIKE '%bean bag%';
4
5 /*
6 表示文本中含有"bean bag"
7 */
找出以F开头y结尾的所有产品
1 SELECT prod_name
2 FROM Products
3 WHERE prod_name LIKE 'F%y';
4
5 /*
6 找出以F开头y结尾的所有产品
7
8 后面所跟的空格,有些DBMS会利用空格填补剩余的字符
9 此时,“Fish bean bag toy”不能被匹配
10
11 注意:LIKE不能匹配NULL
12 */
注意:某些DBMS会利用空格来填充剩余字符,此时则无法匹配以y结尾的字段了。
6.1.2 下划线?_?通配符
只能匹配一个字符
1 SELECT prod_id, prod_name
2 FROM Products
3 WHERE prod_name LIKE '__ inch teddy bear';
对照 "%"的匹配方法
1 SELECT prod_id, prod_name
2 FROM Products
3 WHERE prod_name LIKE '% inch teddy bear';
6.1.3 方括号?[ ]?通配符(Navicat 无法执行)
方括号[]通配符用来指定一个字符,它必须匹配指定位置通配符的位置的一个字符。
例如:找出所有名字以J 或M 起头的联系人
1 /*
2
3 例如:找出所有名字以J 或M 起头的联系人
4 */
5 SELECT cust_contact
6 FROM Customers
7 WHERE cust_contact LIKE '[JM]%'
8 ORDER BY cust_contact;
此通配符可以用前缀字符^?(脱字号)?来否定。
1 #此通配符可以用前缀字符^?(脱字号)?来否定。
2 SELECT cust_contact
3 FROM Customers
4 WHERE cust_contact LIKE '[^JM]%'
5 ORDER BY cust_contact;
6
7 # 注意某些DBMS会用"!"
8 /*
9 等价下面这条语句:
10 SELECT cust_contact
11 FROM Customers
12 WHERE NOT cust_contact LIKE '[JM]%'
13 ORDER BY cust_contact;
14 */
小结
-
不要过度使用通配符。如果其他操作符达到相同的目的,应该使用其他操作符。
-
在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处搜索起来是最慢的。
-
仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。