mysql官方手册学习笔记2mysql模糊查询和正则表达式
找出以B开头的名称:
MySQL >选择宠物,名字像* b %;名业主种-------- + + + + -------- --------- ------ + ------------ + ------------ + | | | | |性别出生死亡Buffy Harold | | + + + + -------- -------- --------- ------ + ------------ + ------------ + | | | |狗F 1989-05-13零Bowser | | | | | | Diane dog m 1989-08-31 1995-07-29 | | | | + + + + -------- -------- --------- ------ ------------ ------------ + + +
找出以财政年度结束的名字:
MySQL >选择宠物,名字像*%风云;名业主种+ -------- + -------- + + + + --------- ------ ------------ ------- + | | | | |性别出生死亡Fluffy Harold | | + + + + -------- -------- --------- ------ + ------------ + ------- + | | | |猫F 1993-02-04空捉鬼| | | | | |哈罗德狗F 1989-05-13空| | | | + + + + -------- -------- --------- ------ ------------ ------- + + +
找出w的名称:
MySQL >选择宠物,名字像*% W %;名业主种---------- + + + + ------- --------- ------ + ------------ + ------------ + | | | | |性别出生死亡爪格温| | + + + + ---------- ------- --------- ------ + ------------ + ------------ + | | | |猫米1994-03-17空Bowser | | | | | | Diane dog m 1989-08-31 1995-07-29 | | | | | |惠斯勒格温鸟空1997-12-09 | | | |空| + + + + ---------- ------- --------- ------ ------------ ------------ + + +
为了找出名字正好包含5个字符,使用_模式特征:
MySQL >选择宠物,名字像名业主_____;------- + + + + + -------- --------- ------ ------------ + ------- + | | |物种性别出生死亡| | | | + ------- + -------- + + + + --------- ------ ------------ ------- + |爪格温猫米| | | | 1994-03-17 NULL Buffy Harold | | | | |狗F 1989-05-13空| | | | + + + + ------- -------- --------- ------ ------------ ------- + + +
模式匹配的MySQL提供的其他类型的扩展正则表达式的使用。当你把这种模式,使用正则表达式而不是regexp运营商(或Rilke不是Rilke,它们是同义词)。
扩展正则表达式的一些字符是:
匹配任何单个字符。
字符类{…}匹配任何字符在中括号。例如,{ ABC }匹配,B,或C命名的字符的范围,使用1。{ }匹配任何字母A-Z、0-9 }和{匹配任何数量的。
*匹配零个或多个在它前面的字符。例如,x *,任何数量的X字符0-9,{ } *,任何数量的数字,和匹配任何数量的任何字符。
如果regexp模式任何值的测试值相匹配,匹配的模式(这是不同于喜欢的模式匹配。只匹配整个值)。
为了找到一个模式,以便它必须匹配测试值的开始或结束,在模式的开头使用否,或者在模式的结尾使用$。
为了说明如何扩展的正则表达式,使用下面的正则表达式重写查询上面显示的一样:
要查找以B开头的名称,请使用:
MySQL >选择宠物,名字^ regexp * B;名业主种+ -------- + -------- + --------- + + + + ------ ------------ ------------ | | | | |性别出生死亡Buffy Harold | | + + + + -------- -------- --------- ------ + ------------ + ------------ + | | | |狗F 1989-05-13零Bowser | | | | | | Diane dog m 1989-08-31 1995-07-29 | | | | + + + + -------- -------- --------- ------ ------------ ------------ + + +
如果你想强迫regexp使案例和案例比较,使用二进制关键词做一个字符串转换成二进制字符串。此查询只匹配小写字母B的缩写的名字。
MySQL >选择*从宠物name regexp二进制^ B;
要找到一个以财政年度结尾的名字,使用$匹配名称的结尾:
MySQL >选择宠物,名字'fy regexp * $;名业主种+ -------- + -------- + + + + --------- ------ ------------ ------- + | | | | |性别出生死亡Fluffy Harold | | + + + + -------- -------- --------- ------ + ------------ + ------- + | | | |猫F 1993-02-04空捉鬼| | | | | |哈罗德狗F 1989-05-13空| | | | + + + + -------- -------- --------- ------ ------------ ------- + + +
要查找w的名称,请使用下面的查询:
MySQL >选择宠物,名字regexp *'w';名业主种+ ---------- + ------- + --------- + + + + ------ ------------ ------------ | | | | |性别出生死亡爪格温| | + ---------- + + + + ------- --------- ------ ------------ + ------------ + | | | |猫米1994-03-17零Bowser | | | | | | Diane dog m 1989-08-31 1995-07-29 | | | | | |惠斯勒格温鸟空1997-12-09 | | | |空| + + + + ---------- ------- --------- ------ ------------ ------------ + + +
由于正则表达式出现在值的任何位置及其模式匹配中,所以不必在前面的查询中放置模式的边上的通配符,这样就可以匹配整个值,就像使用SQL模式一样。
要查找包含5个字符的名称,请使用第一个和最后一个和匹配名称的$和5。两者之间:
MySQL >选择宠物名称* regexp^ ..... $'+ + + + ------- -------- --------- ------ + ------------ + ------- + | |业主|;名种性生死| | | | + ------- + -------- + + + + --------- ------ ------------ ------- + | |爪Gwen cat m 1994-03-17 | | | | | NULL Buffy Harold的狗| F | | | | 1989-05-13 |空| + + + + ------- -------- --------- ------ ------------ ------- + + +
您还可以使用{重复n次运算符重写前一个查询:
MySQL >选择宠物,名字regexp *^。{ 5 } $;名业主种+ ------- + -------- + + + + --------- ------ ------------ ------- + | | | | |性别出生死亡爪格温| | + + + + ------- -------- --------- ------ + ------------ + ------- + | | | |猫我1994-03-17空捉鬼| | | | | |哈罗德狗F 1989-05-13空| | | | + + + + ------- -------- --------- ------ ------------ ------- + + +