我们从一个非常简单的例子开始。下面的语句检索列prod_name包含文本1000的所有行:
SELECT prod_name FROM products WHERE prod_name REGEXP'1000' ORDER BY prod_name;
输出
prod_name JetPack 1000
除关键字LIKE被REGEXP替代外,这条语句看上去非常像使用LIKE的语句(第8章) 。它告诉MySQL:REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理。
为什么要费力地使用正则表达式?在刚才的例子中,正则表达式确实没有带来太多好处(可能还会降低性能),不过,请考虑下面的例子:
SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;
输出
prod_name JetPack 1000 JetPack 2000
这里使用了正则表达式.000。.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符,因此,1000和2000都匹配且返回。
当然,这个特殊的例子也可以用LIKE和通配符来完成。
LIKE与REGEXP 在LIKE和REGEXP之间有一个重要的差别。请看以下两条语句:
SELECT prod_name FROM products WHERE prod_name LIKE '1000' ORDER BY prod_name; SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;
如果执行上述两条语句,会发现第一条语句不返回数据,而第二条语句返回一行。为什么?
LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。这是一个非常重要的差别。
那么,REGEXP能不能用来匹配整个列值(从而起与LIKE相同的作用)?答案是肯定的,使用^和$定位符(anchor)即可。
匹配不区分大小写 MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用BINARY关键字,如WHERE prod_name REGEXP BINARY ‘JetPack .000’。
转载请注明:成都千喜数据恢复中心 » SQL Server如何使用正则表达式基本字符匹配