REGEXP后跟的东西作为正则表达式处理。
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '1000'
ORDER BY
prod_name;
LIKE与REGEXP不同的地方,LIKE匹配整个列(除非使用通配符),REGEXP在列内匹配,例如:
列值为 hello 2017
LIKE ‘2017’ //不能匹配
LIKE '%2017' //能够匹配
REGEXP ‘2017’ //能够匹配
REGEXP也能够匹配整个列,与LIKE相同的作用,使用^和$即可。^是指开始处,$是指结束处,如果是在[]里^是指匹配之外的任何东西,[^123] 却匹配除这些字符外的任何东西。
MySQL中正则表达式(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用BINARY关键字,如
SELECT
products.prod_name
FROM
products
WHERE
prod_name REGEXP BINARY 'JetPack .000';
进行OR匹配
为搜索两个串之一(或者为这个串,或者为另一个串),使用 |
SELECT
products.prod_name
FROM
products
WHERE
prod_name REGEXP '1000|2000'
多个OR条件,可以给出多个|,例如
SELECT
products.prod_name
FROM
products
WHERE
prod_name REGEXP '1000|2000|5';
匹配几个字符之一
通过指定一组用[和]括起来的字符来完成。
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '[123] Ton'
ORDER BY
prod_name;
[123] 定义一组字符,它的意思是匹配1或2或3,因此1 ton和2 ton都匹配且返回。
[]是另外一种OR语句,正则表达式[123]Ton为[1|2|3]Ton的缩写
匹配范围
集合可用来定义要匹配的一个或多个字符。下面所列都是合法的。
[0-9]
[1-3]
[6-9]
[a-z]
SELECT
products.prod_name
FROM
products
WHERE
prod_name REGEXP '[1-5] Ton';
匹配特殊字符
为了匹配特殊字符必须\\作为前导,这种处理也叫转义,例如
\\-表示查找-
\\.表示查找.
\\\ 表示查找\
SELECT
vendors.vend_name
FROM
vendors
WHERE
vend_name REGEXP '\\.'
ORDER BY
vend_name;
\\也用来引用元字符(具有特殊含义的字符)
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表
转移字符需要两个反斜杠(MySQL自己解释一个,正则表达式解释另一个
)
匹配多个实例
* 0个或多个匹配
+ 1个或多个匹配(等于{1,})
? 0个或1个匹配
{n} 指定书目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '\\([0-9] sticks?\\)';
\\([0-9] sticks?\\) 解释为 \\( 匹配(,[0-9]匹配任意数字,sticks?匹配stick和sticks(s后面的?使s可选)
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '[0-9]{4}';
匹配任意4个连在一起的数字。
定位符
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>]]] 词的结尾
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '^[0-9\\.]';
^匹配串的开始,只在.或任意数字为串中第一个字符时才匹配它们.
^有两种用法,在集合中(用[和]定义),用它来否定该集合,否则,用来指串的开始处。
为了让REGEXP与LIKE具有相同的作用,需要使用^表示开始处,$表示结束处。
简单的正则表达式测试
SELECT 'hello' REGEXP '0-9';
这个例子显然返回0