MySQL标准和扩展的SQL匹配模式

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正则表达式”规则。这里只做实际应用中的简单讲解,更多请参考相关文章。
posted @ 2011-04-24 18:23  飞虎cnblog  阅读(320)  评论(0编辑  收藏  举报
友情链接:技术迷 | JSM官方博客 | 阿旭博客 | 有声小说在线听