|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。择要:本文先容了有关字符串形式婚配的有关常识。尺度的SQL形式婚配是SQL言语的尺度,能够被别的干系数据库体系承受。扩大正轨表达式形式婚配是依据Unix体系的尺度开辟了,一样平常只可以使用在MySQL上,可是其功效要比尺度的SQL形式婚配更强。
MySQL供应尺度的SQL形式婚配,和一种基于象Unix有用程序如vi、grep和sed的扩大正则表达式形式婚配的格局。
尺度的SQL形式婚配
SQL的形式婚配同意你利用“_”婚配任何单个字符,而“%”婚配恣意数量字符(包含零个字符)。在MySQL中,SQL的形式缺省是疏忽巨细写的。上面显现一些例子。注重在你利用SQL形式时,你不克不及利用=或!=;而利用LIKE或NOTLIKE对照操纵符。
比方,在表pet中,为了找出以“b”开首的名字:
mysql>SELECT*FROMpetWHEREnameLIKE"b%";
+--------+--------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+------------+
|Buffy|Harold|dog|f|1989-05-13|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
+--------+--------+---------+------+------------+------------+
为了找出以“fy”开头的名字:
mysql>SELECT*FROMpetWHEREnameLIKE"%fy";
+--------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+-------+
|Fluffy|Harold|cat|f|1993-02-04|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+--------+--------+---------+------+------------+-------+
为了找出包括一个“w”的名字:
mysql>SELECT*FROMpetWHEREnameLIKE"%w%";
+----------+-------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+----------+-------+---------+------+------------+------------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
|Whistler|Gwen|bird|NULL|1997-12-09|NULL|
+----------+-------+---------+------+------------+------------+
为了找出包括恰好5个字符的名字,利用“_”形式字符:
mysql>SELECT*FROMpetWHEREnameLIKE"_____";
+-------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+-------+--------+---------+------+------------+-------+
扩大正则表达式形式婚配
由MySQL供应的形式婚配的其他范例是利用扩大正则表达式。当你对这类形式举行婚配测试时,利用REGEXP和NOTREGEXP操纵符(或RLIKE和NOT
RLIKE,它们是同义词)。
扩大正则表达式的一些字符是:
“.”婚配任何单个的字符。
一个字符类“[...]”婚配在方括号内的任何字符。比方,“[abc]”婚配“a”、“b”或“c”。为了定名字符的一个局限,利用一个“-”。
“[a-z]”婚配任何小写字母,而“[0-9]”婚配任何数字。
“*”婚配零个或多个在它后面的器材。比方,“x*”婚配任何数目的“x”字符,“[0-9]*”婚配的任何数目的数字,而“.*”婚配任何数
量的任何器材。
正则表达式是辨别巨细写的,可是假如你但愿,你能利用一个字符类婚配两种写法。比方,“[aA]”婚配小写或年夜写的“a”而“[a-zA-Z]”匹
配两种写法的任何字母。
假如它呈现在被测试值的任何中央,形式就婚配(只需他们婚配全部值,SQL形式婚配)。
为了定位一个形式以便它必需婚配被测试值的入手下手或开头,在形式入手下手处利用“^”或在形式的开头用“$”。
为了申明扩大正则表达式怎样事情,下面所示的LIKE查询鄙人面利用REGEXP重写:
为了找出以“b”开首的名字,利用“^”婚配名字的入手下手而且“[bB]”婚配小写或年夜写的“b”:
mysql>SELECT*FROMpetWHEREnameREGEXP"^[bB]";
+--------+--------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+------------+
|Buffy|Harold|dog|f|1989-05-13|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
+--------+--------+---------+------+------------+------------+
为了找出以“fy”开头的名字,利用“$”婚配名字的开头:
mysql>SELECT*FROMpetWHEREnameREGEXP"fy$";
+--------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+--------+--------+---------+------+------------+-------+
|Fluffy|Harold|cat|f|1993-02-04|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+--------+--------+---------+------+------------+-------+
为了找出包括一个“w”的名字,利用“[wW]”婚配小写或年夜写的“w”:
mysql>SELECT*FROMpetWHEREnameREGEXP"[wW]";
+----------+-------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
+----------+-------+---------+------+------------+------------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Bowser|Diane|dog|m|1989-08-31|1995-07-29|
|Whistler|Gwen|bird|NULL|1997-12-09|NULL|
+----------+-------+---------+------+------------+------------+
既然假如一个正轨表达式呈现在值的任何中央,其形式婚配了,就不用再先前的查询中在形式的两方面安排一个通配符以使得它婚配全部值,
就像假如你利用了一个SQL形式那样。
为了找出包括恰好5个字符的名字,利用“^”和“$”婚配名字的入手下手和开头,和5个“.”实例在二者之间:
mysql>SELECT*FROMpetWHEREnameREGEXP"^.....$";
+-------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+-------+--------+---------+------+------------+-------+
你也能够利用“{n}”“反复n次”操纵符重写先前的查询:
mysql>SELECT*FROMpetWHEREnameREGEXP"^.{5}$";
+-------+--------+---------+------+------------+-------+
|name|owner|species|sex|birth|death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
+-------+--------+---------+------+------------+-------+
总结
本先容了有关字符串形式婚配的有关常识。尺度的SQL形式婚配是SQL言语的尺度,能够被别的干系数据库体系承受。扩大正轨表达式形式婚配
是依据Unix体系的尺度开辟了,一样平常只可以使用在MySQL上,可是其功效要比尺度的SQL形式婚配更强。
业界普遍的声音认为:“MySQL是一个可靠的数据库系统,MySQL学习教程无论是在嵌入式或大型群集系统的部署中,还是在基于Web的应用程序领域。 |
|