模式匹配
sql模式匹配允许使用"_"匹配任何单个字符,"%"匹配任意数目字符(包括零字符)。使用sql模式时,不能使用= 或!=,应使用like或not like比较操作符。
实例:
-
找出以'b'开头的名字
select * from pet where name like 'b%';
-
找出以'fy'结尾的名字
select * from pet where name like '%fy';
-
找出包含'w'的名字
select * from pet where name like '%w%';
-
找出正好包含5个字符的名字
select * from pet where name like '_____';
由MySQL提供的模式匹配的其他类型是使用正则扩展表达式。使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE)。
- . :'.'匹配任意单个字符
- […]:'[...]'匹配在方括号内的任何字符。例如,"[abc]"匹配"a"、"b"或"c"。"[a-z]"匹配任何字母,而"[0-9]"匹配任何数字
- *:匹配零个或多个在它前面的字符。例如,"x*"匹配任何数量的"x"字符,"[0-9*]"匹配任何数量的数字,而".*"匹配任何数量的任何字符
- ^:必须以指定字符开始
- $:必须以指定字符结束
实例:
-
找出以"b"开头的名字,使用"^"匹配名字的开始
select * from pet where name regexp '^b';
-
强制regexp比较区分大小写,使用binary关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写"b"
select * from pet where name regexp binary '^b';
-
找出以'fy'结尾的名字,使用'$'匹配名字的结尾
select * from pet where name regexp 'fy$';
-
找出包含'w'的名字
select * from pet where name regexp 'w';
-
找出正好包含5个字符的名字,使用"^"和"$"匹配名字的开始和结尾,和5个"."实例在两者之间
select * from pet where name regexp '^.....$';
-
使用"{n}"重复n次操作符重写5中查询
select * from pet where name regexp '^.{5}$';