SQL标准模式匹配:

    在SQL标准模式匹配中,使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。注意使用SQL匹配模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。

找出以“b”开头的名字:


mysql> SELECT * FROM goods WHERE goodsname LIKE 'b%'; 

找出以“fy”结尾的名字:


mysql> SELECT * FROM goods WHERE goodsname LIKE '%fy'; 

找出包含“w”的名字:


mysql> SELECT * FROM goods WHERE goodsname LIKE '%w%'; 

找出正好包含5个字符的名字,使用“_”模式字符:


mysql> SELECT * FROM goods WHERE goodsname LIKE '_____'; 

SQL扩展模式匹配:

    MySQL的另一个匹配模式是使用扩展正则表达式。它们使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,同义词)。

扩展正则表达式的一些字符是:

1.‘.’匹配任何单个的字符。

2.字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。

3.“ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。

注意:(1) REGEXP模式匹配中,在值的局部任何地方发现匹配,则表示成功匹配;这一点不同于LIKE模式,只有与整个值匹配,才表示成功匹配。
(2)当要求被匹配值的开始与结尾进行完整匹配时,在表达式开始处使用“^”和在结尾用“$”。

就上面标准SQL模式匹配的几个案例,下面用扩展表达式的方式重写:

为了找出以“b”开头的名字,使用“^”匹配名字的开始:


mysql> SELECT * FROM goods WHERE goodsname REGEXP '^b'; 

如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写‘b’。


mysql> SELECT * FROM goods WHERE goodsname REGEXP BINARY '^b'; 

为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:


mysql> SELECT * FROM goods WHERE goodsname REGEXP 'fy$'; 

为了找出包含一个“w”的名字,使用以下查询:


mysql> SELECT * FROM goods WHERE goodsname REGEXP 'w'; 

为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:


mysql> SELECT * FROM pet WHERE name REGEXP '^.....$'; 

也可以使用“{n}”“重复n次”操作符重写前面的查询:


mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';  关于MySQL扩展模式匹配中,其表达式的书写有完整的一套“MySQL正则表达式”规则。