第6课 用通配符进行过滤


       这一课介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。


Q: 怎样搜索产品名中包含文本bean bag的所有产品?


A; 如果你想找出名称包含bean bag的所有产品,可以构造一个通配符搜索模式,找出在产品名的任何位置出现bean bag的产品。


通配符本身实际上是SQL的WHERE子句中有特殊含义的字符.为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式 利用通配符匹配而不是简单的相等匹配进行比较。


注意: 通配符搜索只能用于文本字段(串),非文本数据类型字段不能使用通配符搜索.



6.1.1 百分号(%)通配符


百分号(%)通配符:%表示任何字符出现任意次数,


eg. 为了找出所有以词Fish起头的产品:


SELECT prod_id, prod_name


FROM Products


WHERE prod_name        LIKE 'Fish%';


这里,%告诉DBMS接受Fish之后的任意字符,不管它有多少字符。


%bean bag%'表示匹配任何位置上包含文本bean bag的值,不论它之前或之后出现什么字符,LIKE 'F%y'表示找出以F起头、以y结尾的所有产品。


警告:请注意NULL: 通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。



6.1.2 下划线(_)通配符


只匹配单个字符,而不是多个字符。


与%能匹配0个字符不同,_总是刚好匹配一个字符,不能多也不能少。


__



6.1.3 方括号([ ])通配符


方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符


例如,找出所有名字以J或M起头的联系人,可进行如下查询:


SELECT cust_contact


FROM Customers 


WHERE cust_contact        LIKE '[JM]%'


ORDER BY cust_contact;


此语句的WHERE子句中的模式为'[JM]%'。这一搜索模式使用了两个不同的通配符。[JM]匹配任何以方括号中字母开头的联系人名,它也只能匹配单个字符。因此,任何多于一个字符的名字都不匹配。[JM]之后的%通配符匹配第一个字符之后的任意数目的字符,返回所需结果.


此通配符可以用前缀字符^(脱字号)来否定。'[^JM]%



通配符搜索一般比前面讨论的其他搜索要耗费更长的处理时间。