MySQL提供标准的SQL模式匹配,以及一种基于类Unix里的程序如vi、grep和sed里的扩展正则表达式模式匹配的格式。 SQL模式匹配允许你使用 ”_”匹配任何单个字符, ”%”匹配任意数目字符(包括零字符)。 在 MySQL中,SQL的模式默认是忽略大小写的。 下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。
一、”%”匹配任意数目字符(包括零字符)。1.) 要想找出以“b”开头的名字:
SLECT * FROM table_name WHERE name LIKE 'b%';
2.)要想找出以“fy”结尾的名字:
SELECT * FROM table_name WHERE name like '%fy'
3.) 要想找出包含“w”的名字:
SELECT * FROM table_name WHERE name LIKE '%w%'
二、 “_”匹配任何单个字符
如查询名字正好是五个字符, 使用“_”模式字符:
SELECT * FROM table_name WHERE name LIKE '_____';
MySQL提供的扩展正则表达式
由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
扩展正则表达式的一些字符是:
‘.’匹配任何单个的字符。
字符类“[…]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
“ ”匹配零个或多个在它前面的字符。例如,“x”匹配任何数量的“x”字符,“[0-9]”匹配任何数量的数字,而“.”匹配任何数量的任何字符。
如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。 为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询: 1.) 查找名字以b开头:
SELECT * FROM table_name WHERE REGEXP '^b';
2.)查找名字以fy结尾:
SELECT * FROM table_name WHERE REGEXP 'fy$';
3.)包含‘w’:
SELECT * FROM table_name WHERE REGEXP 'W';
匹配名字正好是5个字符
a.)为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:
SELECT * FROM table_name WHERE name REGEXP '^.....$';
b.)使用“{n}”重复n次操作符,重写前面的查询:
SELECT * FROM table_name WHERE name REGEXP '^.{5}$';
参考:https://www.shiyanlou.com/courses/running