MySQL字符串模式匹配扩展正则表达式模式匹配
SQL模式匹配允许你使用_匹配任何单个字符,和任意数量的字符,%(包括零字符)。在MySQL,SQL模式默认是可以忽略不计的。这里是一些例子。注意:当你使用SQL模式,你不能使用=或!=;用喜欢或不喜欢比较运算符。
例如,在表宠物中,查找以B开头的名称:
从宠物名称中选择*;
+ + + + -------- -------- --------- ------ ------------ ------------ + + +
名业主| | |物种|性|出生|死亡|
+ + + + -------- -------- --------- ------ ------------ ------------ + + +
Buffy Harold的狗| | | | F | 1989-05-13 |空|
Bowser Diane的狗| | | | M | 1989-08-31 | 1995-07-29 |
+ + + + -------- -------- --------- ------ ------------ ------------ + + +
找到以财政年度结束的名字:
从宠物名称中选择*;
+ + + + -------- -------- --------- ------ ------------ ------- + + +
名业主| | |物种|性|出生|死亡|
+ + + + -------- -------- --------- ------ ------------ ------- + + +
蓬松的哈罗德猫| | | | F | 1993-02-04 |空|
Buffy Harold的狗| | | | F | 1989-05-13 |空|
+ + + + -------- -------- --------- ------ ------------ ------- + + +
找到W的名称:
从宠物名称中选择*;
+ + + + ---------- ------- --------- ------ ------------ ------------ + + +
名业主| | |物种|性|出生|死亡|
+ + + + ---------- ------- --------- ------ ------------ ------------ + + +
格温的猫爪| | | | M | 1994-03-17 |空|
Bowser Diane的狗| | | | M | 1989-08-31 | 1995-07-29 |
Whistler Gwen鸟| | | |空| 1997-12-09 |空|
+ + + + ---------- ------- --------- ------ ------------ ------------ + + +
为了找到只包含5个字符的名字,使用_模式特征:
MySQL >选择宠物,名字像_____ ;
+ + + + ------- -------- --------- ------ ------------ ------- + + +
名业主| | |物种|性|出生|死亡|
+ + + + ------- -------- --------- ------ ------------ ------- + + +
格温的猫爪| | | | M | 1994-03-17 |空|
Buffy Harold的狗| | | | F | 1989-05-13 |空|
+ + + + ------- -------- --------- ------ ------------ ------- + + +
MySQL提供了一个标准的SQL模式匹配,以及格式的基础上扩展的正则表达式模式基于UNIX工具如vi,grep匹配,和SED。
扩展正则表达式模式匹配
模式匹配的MySQL提供的其他类型的扩展正则表达式的使用。当你把这种模式,使用正则表达式而不是regexp运营商(或Rilke不是Rilke,它们是同义词)。
扩展正则表达式的一些字符是:
匹配任何单个字符。
字符类{…}匹配方括号中的任何字符。例如,{ }匹配a、b或c,以便命名一系列字符,使用一个字符—。
{ }匹配任何小写字母A-Z、0-9 }和{匹配任何数量的。
*匹配零个或多个事物在它前面。例如,x *,任何数量的X字符0-9,{ } *,任何数字,任何事情,任何。
正则表达式是大小写敏感的,但是如果你愿意,你可以使用一个字符类匹配写的两种方式。例如,{ AA }匹配小写或大写,{ a-za-z }匹配任何两写的信件。
如果它出现在测试值的任何位置,模式匹配(只要它们匹配整个值,SQL模式匹配)。
为了找到一个模式,以便它必须匹配测试值的开始或结束,在模式的开头使用否,或者在模式的结尾使用$。
说明如何扩展正则表达式的作品,如上面所示的查询使用regexp改写下面:
要查找以B开头的名称,请使用匹配名称的开头和{}匹配小写或大写B:
MySQL >选择*从宠物name regexp^ { BB };
+ + + + -------- -------- --------- ------ ------------ ------------ + + +
名业主| | |物种|性|出生|死亡|
+ + + + -------- -------- --------- ------ ------------ ------------ + + +
Buffy Harold的狗| | | | F | 1989-05-13 |空|
Bowser Diane的狗| | | | M | 1989-08-31 | 1995-07-29 |
+ + + + -------- -------- --------- ------ ------------ ------------ + + +
要找到一个以财政年度结尾的名字,使用$匹配名称的结尾:
MySQL >选择*从宠物那里叫fy___fckpd___5quot ;;;;; regexp
+ + + + -------- -------- --------- ------ ------------ ------- + + +
名业主| | |物种|性|出生|死亡|
+ + + + -------- -------- --------- ------ ------------ ------- + + +
蓬松的哈罗德猫| | | | F | 1993-02-04 |空|
Buffy Harold的狗| | | | F | 1989-05-13 |空|
+ + + + -------- -------- --------- ------ ------------ ------- + + +
若要找到w的名称,请使用{ }来匹配小写或大写W:
MySQL >选择*从宠物name regexp{ WW };
+ + + + ---------- ------- --------- ------ ------------ ------------ + + +
名业主| | |物种|性|出生|死亡|
+ + + + ---------- ------- --------- ------ ------------ ------------ + + +
格温的猫爪| | | | M | 1994-03-17 |空|
Bowser Diane的狗| | | | M | 1989-08-31 | 1995-07-29 |
Whistler Gwen鸟| | | |空| 1997-12-09 |空|
+ + + + ---------- ------- --------- ------ ------------ ------------ + + +
现在,如果正则表达式出现在值的任何地方及其模式匹配中,则不需要在前一个查询的两个方面放置一个通配符来匹配整个值。
就像使用SQL模式一样。
要查找包含5个字符的名称,请使用第一个和最后一个和匹配名称的$和5。两者之间:
MySQL >选择*从宠物name regexp^ ..... ___fckpd___7quot;;
+ + + + ------- -------- --------- ------ ------------ ------- + + +
名业主| | |物种|性|出生|死亡|
+ + + + ------- -------- --------- ------ ------------ ------- + + +
格温的猫爪| | | | M | 1994-03-17 |空|
Buffy Harold的狗| | | | F | 1989-05-13 |空|
+ + + + ------- -------- --------- ------ ------------ ------- + + +
您还可以使用{重复n次运算符重写前一个查询:
MySQL >选择*从宠物name regexp^。{ 5 } ___fckpd___8quot ;;;;;
+ + + + ------- -------- --------- ------ ------------ ------- + + +
名业主| | |物种|性|出生|死亡|
+ + + + ------- -------- --------- ------ ------------ ------- + + +
格温的猫爪| | | | M | 1994-03-17 |空|
Buffy Harold的狗| | | | F | 1989-05-13 |空|
+ + + + ------- -------- --------- ------ ------------ ------- + + +
总结
本文介绍了字符串模式匹配的一些知识,标准SQL模式匹配是SQL语言的标准,可以被其他关系数据库系统接受,扩展正则表达式模式匹配。
它是根据UNIX系统的标准开发的。它只能在MySQL上使用,但它的功能比标准的SQL模式要好。