MySQL标准和扩展的SQL匹配模式
SQL标准模式匹配:
在SQL标准模式匹配中,使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。注意使用SQL匹配模式时,不能使用=或!=;而应使用LIKE或NOT 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”开头的名字,使用“^”匹配名字的开始:
如果你想强制使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正则表达式”规则。这里只做实际应用中的简单讲解,更多请参考相关文章。