相关的文档10bet官方网站 本手册下载 本手册节选

3.3.4.7模式匹配

MySQL提供了标准的SQL模式匹配,以及一种基于扩展正则表达式的模式匹配形式,类似于Unix实用程序所使用的模式匹配6grep,sed

SQL模式匹配使您能够使用_匹配任何单个字符和匹配任意数量的字符(包括零字符)。在MySQL中,SQL模式默认情况下是不区分大小写的。这里展示了一些例子。不要使用<>当您使用SQL模式时。使用就像不喜欢比较运算符。

找到以…开头的名字b

SELECT * FROM pet WHERE name LIKE 'b%';+--------+--------+---------+------+------------+------------+ | 名字出生性物种| | | | |所有者死亡  | +--------+--------+---------+------+------------+------------+ | 巴菲狗哈罗德| | | f零| | 1989-05-13 | |包泽戴安| |狗| 1989-08-31 | 1989-08-31 |米  | +--------+--------+---------+------+------------+------------+

找到以…结尾的名字财政年度

SELECT * FROM pet WHERE name LIKE '%fy';+--------+--------+---------+------+------------+-------+ | 名字出生性物种| | | | |所有者死亡  | +--------+--------+---------+------+------------+-------+ | 毛茸茸的猫哈罗德| | | f零| | 1993-02-04 | |巴菲狗哈罗德| | | | 1989-05-13 |空  | +--------+--------+---------+------+------------+-------+

查找包含a的名称w

SELECT * FROM pet WHERE name LIKE '%w%';+----------+-------+---------+------+------------+------------+ | 名字出生性物种| | | | |所有者死亡  | +----------+-------+---------+------+------------+------------+ | 猫爪子|格温| |米零| | 1994-03-17 | |包泽戴安| | |米狗| 1989-08-31 | 1989-08-31 | |惠斯勒|格温|鸟零| 1997-12-09 | | NULL  | +----------+-------+---------+------+------------+------------+

类的五个实例可以找到包含恰好五个字符的名称_模式特点:

SELECT * FROM pet WHERE name LIKE '_____';+-------+--------+---------+------+------------+-------+ | 名字出生性物种| | | | |所有者死亡  | +-------+--------+---------+------+------------+-------+ | 猫的爪子|格温| |米零| | 1994-03-17 | |巴菲狗哈罗德| | | | 1989-05-13 |空  | +-------+--------+---------+------+------------+-------+

MySQL提供的另一种模式匹配使用扩展正则表达式。在测试此类型模式的匹配时,请使用REGEXP_LIKE ()函数(或正则表达式RLIKE运算符,它们是同义词REGEXP_LIKE ()).

下面的列表描述了扩展正则表达式的一些特征:

  • 匹配任何单个字符。

  • 一个字符类[…]匹配括号内的任何字符。例如,(美国广播公司)匹配一个b,或c.要命名一个字符范围,请使用破折号。的[a -ž]匹配任何字母,而[0 - 9]匹配任何数字。

  • 匹配前一个对象的零个或多个实例。例如,x *匹配任意数量的x字符,[0 - 9] *匹配任意数量的数字,并且.*匹配任意数字。

  • 如果模式与被测试值中的任何位置匹配,则正则表达式模式匹配成功。(这与a不同就像模式匹配,只有当模式匹配整个值时才会成功。)

  • 要锚定模式,使其必须与被测试值的开始或结束相匹配,请使用在开始的时候在模式的最后。

要演示扩展正则表达式是如何工作的,可以使用就像前面显示的查询在这里重写以使用REGEXP_LIKE ()

找到以…开头的名字b,使用要匹配名称的开头:

SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b');+--------+--------+---------+------+------------+------------+ | 名字出生性物种| | | | |所有者死亡  | +--------+--------+---------+------+------------+------------+ | 巴菲狗哈罗德| | | f零| | 1989-05-13 | |包泽戴安| |狗| 1979-08-31 | 1979-08-31 |米  | +--------+--------+---------+------+------------+------------+

要强制正则表达式比较区分大小写,请使用区分大小写的排序规则,或使用二进制关键字将其中一个字符串设为二进制字符串,或指定c对比赛控制字符。每个查询只匹配小写字母b名字的开头:

SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b' COLLATE utf8mb4_0900_as_cs);SELECT * FROM pet WHERE REGEXP_LIKE(name, BINARY '^b');SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b', 'c');

找到以…结尾的名字财政年度,使用要匹配名字的结尾:

SELECT * FROM pet WHERE REGEXP_LIKE(name, 'fy$');+--------+--------+---------+------+------------+-------+ | 名字出生性物种| | | | |所有者死亡  | +--------+--------+---------+------+------------+-------+ | 毛茸茸的猫哈罗德| | | f零| | 1993-02-04 | |巴菲狗哈罗德| | | | 1989-05-13 |空  | +--------+--------+---------+------+------------+-------+

查找包含a的名称w,使用这个查询:

SELECT * FROM pet WHERE REGEXP_LIKE(name, 'w');+----------+-------+---------+------+------------+------------+ | 名字出生性物种| | | | |所有者死亡  | +----------+-------+---------+------+------------+------------+ | 猫爪子|格温| |米零| | 1994-03-17 | |包泽戴安| | |米狗| 1989-08-31 | 1989-08-31 | |惠斯勒|格温|鸟零| 1997-12-09 | | NULL  | +----------+-------+---------+------+------------+------------+

因为正则表达式模式匹配的前提是它出现在值的任何位置,所以在前面的查询中,不必在模式的任意一侧放置通配符来匹配整个值,就像SQL模式一样。

要查找包含恰好五个字符的名称,请使用而且匹配名称的开头和结尾,以及的五个实例之间:

SELECT * FROM pet WHERE REGEXP_LIKE(name, '^.....$');+-------+--------+---------+------+------------+-------+ | 名字出生性物种| | | | |所有者死亡  | +-------+--------+---------+------+------------+-------+ | 猫的爪子|格温| |米零| | 1994-03-17 | |巴菲狗哈罗德| | | | 1989-05-13 |空  | +-------+--------+---------+------+------------+-------+

方法编写前面的查询n}重复,n两度)操作符:

SELECT * FROM pet WHERE REGEXP_LIKE(name, '^.{5}$');+-------+--------+---------+------+------------+-------+ | 名字出生性物种| | | | |所有者死亡  | +-------+--------+---------+------+------------+-------+ | 猫的爪子|格温| |米零| | 1994-03-17 | |巴菲狗哈罗德| | | | 1989-05-13 |空  | +-------+--------+---------+------+------------+-------+

有关正则表达式语法的更多信息,请参见第12.8.2节,“正则表达式”