上一篇:【MySQL必知必会(五)】【用通配符进行过滤】
+++++++++++++开始线++++++++++++++++
所有种类的程序设计语言、文本编辑器、操作系统都支持正则表达式。
MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据
仅为正则表达式语言的一个子集
MySQL仅支持多数正则表达式实现的一个很小的子集
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '1000'
-> ORDER BY prod_name;
分析
这条语句看上去非常像使用LIKE的语句。REGEXP后跟的东西作为正则表达式处理
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '.000'
-> ORDER BY prod_name;
分析
.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符,所以1000和2000都匹配且返回
LIKE与REGEXP
LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到,相应的行也不被返回。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。
为搜索两个串之一,使用|
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '1000|2000'
-> ORDER BY prod_name;
通过指定一组[和]括起来的字符
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[123] Ton'
-> ORDER BY prod_name;
分析
[123]Ton为[1|2|3]Ton的缩写
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '1|2|3 Ton'
-> ORDER BY prod_name;
分析
[^123]匹配除这些字符外的任何东西
集合可用来定义要匹配的一个或多个字符
范围不限于完整的集合,范围不一定只是数值,[a-z]匹配任意字符字符
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[1-5] Ton'
-> ORDER BY prod_name;
mysql> SELECT vend_name
-> FROM vendors
-> WHERE vend_name REGEXP '.'
-> ORDER BY vend_name;
分析
.匹配任意字符,因此每个行都被检索出来
mysql> SELECT vend_name
-> FROM vendors
-> WHERE vend_name REGEXP '\\.'
-> ORDER BY vend_name;
匹配\
为了匹配反斜杠字符本身,需要使用\\
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
-> ORDER BY prod_name;
分析
[0-9]匹配任意数字
sticks?匹配stick和sticks
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[[:digit:]]{4}'
-> ORDER BY prod_name;
分析
[:digit:]匹配任意数字
{4}要求它前面的字符出现4次
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]'
-> ORDER BY prod_name;
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '^[0-9\\.]'
-> ORDER BY prod_name;
分析
^匹配串的开始
使REGXP起类似LIKE的作用
LIKE和REGEXP的不同在于,LIKE匹配整个串而REGEXP匹配字串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用与LIKE一样
+++++++++++++结束线++++++++++++++++
下一篇:【MySQL必知必会(七)】【创建计算字段】