2.2.3 文本模糊查找
当我们不能完全确定需要查找的信息时,可以使用SQL模糊查找的功能进行文本检索,对应的运算符是LIKE。
假如我们想要知道姓“关”的员工有哪些,可以使用以下查询:
其中,LIKE关键字指定了一个字符串匹配模式,查找姓名以“关”字开头的员工。查询返回的结果如下:
LIKE运算符支持以下两个通配符,可以用于指定匹配的模式:
● 百分号(%),表示匹配零个或者多个任意字符。
● 下画线(_),表示匹配一个任意字符。
以下是一些常用的模式和匹配的字符串:
● LIKE'en%',匹配以“en”开始的字符串,例如“english”“end”。
● LIKE'%en%',匹配包含“en”的字符串,例如“length”“when”。
● LIKE'%en',匹配以“en”结束的字符串,例如“ten”“when”。
● LIKE'Be_',匹配以“Be”开头,再加上一个任意字符的字符串。例如“Bed”“Bet”。
● LIKE'_e%',匹配一个任意字符加上“e”开始的字符串,例如“he”“year”。
由于百分号和下画线是LIKE运算符中的通配符,因此,如果我们查找的模式中包含了“%”或者“_”,就需要用到转义字符(escape character)。
转义字符可以将通配符当作普通字符使用。我们首先创建一个测试表:
表t_like只有一个字段c1,数据类型为字符串,表中包含两条记录。假如现在我们需要查找包含“25%”的数据,其中百分号是要查找的内容而不是任意多个字符,可以使用转义字符进行查找:
ESACPE关键字为LIKE运算符指定了一个#符号作为转义字符,因此查找模式中的第二个%代表了百分号,其他的%则是通配符。该查询返回的结果如下:
提示:对于MySQL和PostgreSQL而言,如果省略ESCAPE子句,默认的转义字符为反斜杠(\)。
使用LIKE运算符进行文本查找时,还需要注意英文字母的大小写问题。例如,以下语句使用大写字母查找员工的电子邮箱:
该查询在不同的数据库中返回的结果不同:
对于LIKE运算符,MySQL、Microsoft SQL Server以及SQLite中的字符串默认不区分大小写,Oracle和PostgreSQL中的字符串默认区分大小写。
提示:PostgreSQL提供了不区分大小写的ILIKE运算符,使用方法和LIKE相同。Microsoft SQL Server支持使用方括号匹配([])或者不匹配([^])指定范围或集合内的任何单个字符,例如[a-z]表示匹配字符a到字符z。
NOT LIKE运算符可以执行与LIKE运算符相反的操作,也就是返回不匹配某个模式的文本。例如,以下语句查找t_like表中不包含“25%”的记录:
查询返回的结果如下: