LIKE
操作符用于在 WHERE
子句中搜索列中的指定搜索模式,请看下面实例:
SELECT * FROM Persons WHERE City LIKE 'N%'
'N%'
就是指定的搜索模式,具体含义请看下面的内容。
在搜索串中,%
表示任何字符出现任意次数。例如,为了找出所有以词Fish
起头的产品,可写以下的SELECT
语句:
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE 'Fish%';
输出如下:
prod_id prod_name --------------------------------- BNBG01 Fish bean bag toy
有的DBMS搜索时可能会区分大小写,如果区分大小写。那么
'fish%'
与Fish bean bag toy
就不匹配。
通配符可以在搜索模式的任意地方使用,并且可以使用多个通配符。
比如:
WHERE prod_name LIKE '%bean bag%';
WHERE prod_name LIKE 'F%y'
有的DBMS用空格填补字段的内容,例如,一列有50个字符,而存储的文本
Fish bean bag toy
(17个字符),则为填满该列需要在该文本后加33个空格。这样做对数据的一般使用没有影响,但是可能对上述SQL语句有影响。
比如
WHERE prod_name LIKE 'F%y'
,如果值后面跟了空格,Fish bean bag toy
就检索不出来,解决办法是:使用'F%y%'
。更好的解决办法是用函数去掉空格。函数的方法后续会讲到。
下划线通配符与百分号通配符用途一样,但它只匹配单个字符。
举一个例子:
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE '_ inch teddy bear';
输出如下:
prod_id prod_name ---------------------------------- BR02 12 inch teddy bear BR03 18 inch teddy bear
方括号通配符用来指定一个字符集。它也只能匹配单个字符。
微软的SQL Server支持方括号通配符
[]
,但MySQL,Oracle,DB2等不支持。
举一个例子:
SELECT C_name FROM Table_C WHERE C_name LIKE '[JM]%' ORDER BY C_name;
输出如下:
C_name ------ Jack John Mike
[JM]
匹配方括号中任意一个字符,它只能匹配单个字符。
然后,%
通配符匹配第一个字符之后的任意数目的字符,返回所需结果。
此通配符可以用前缀字符^
(脱字号)来否定,例如:
SELECT C_name FROM Table_C WHERE C_name LIKE '[^JM]%' ORDER BY C_name;
它的功能就是匹配以J和M之外的任意字符起头的任意名字,当然,用NOT
操作符也能得出类似的结果。
这一课讲了LIKE
操作符,以及% _
和[]
通配符,通配符应细心使用不要使用过度。
下节课我们将一起学习如何创建计算字段。