SQL 语言通配符及正则表达式

通配符

关键字 LIKE

%百分号通配符

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE 'jet%'

将得到任意以jet开头的prod_name。在MySQL的配置中可以设置是否区分大小写

%可以在任意位置使用并且使用多个通配符

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE '%anvil%'

将得到任何位置包含anvil的字符
同理,还可以使用’e%s’等方式

注意:%可以表示0到多个字符,但不能匹配NULL

_下划线通配符

下划线通配符只能表示单个字符
使用方法:获得前面只有一个字符,后面为’ ton anvil’的

SELECT prod_id,prod_mane
FROM products
WHERE pro_name LIKE '_ ton anvil'

注意: _ 只能表示一个字符,不能多也不能少

正则表达式

关键字 REGEXP

与通配符相当的结果

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'

得到包含1000 的输出

SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'

使用 . 这个字符 表示任意 字符

OR 匹配

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'

选择得到包含1000或者2000的输出

[] 匹配 方法1

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'

将选择1 Ton 或者2 Ton 或者3 Ton
[] 是另一种形式的OR

注意:

WHERE prod_name REGEXP '[123] Ton'

等同于

WHERE prod_name REGEXP '1 Ton|2 Ton|3 Ton'

而不是

WHERE prod_name REGEXP '1|2|3 Ton'

因为后者的意思为查找1或者2或者3 Ton

[] 匹配 方法2

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-3] Ton'
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[a-z] Ton'

使用[ - ]表示一个范围的限定

匹配特殊字符 使用\

对之前说到的 . [] | 这些特殊字符的查找,需要使用\

SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\.'

得到所有包含.的prod_name
注意
\f \n 等空白元字符也用这个来表示
\\ 用来表示对\的查找

匹配多个实例(难点)

字符 意义
* 0个或者多个匹配
+ 一个或者多个匹配
0个或者1个匹配
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围 m<255

例子 1

SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'

1、()前面的\表示查找的包含()
2、[0-9]表示这里包含一个0到9之间的数字
3、s后面的?表示s 应有0个或者1个
可以得到输出如下:
TNT (1 stick)
TNT (2 sticks)

例子 2

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[:digit:]{4}'

1、[:digit:]表示任意数字,如[0-9]
2、{4}表示前面的数字出现4次
这个 可以得到任意包含四个连续数字的prod_name

定位符

字符 意义
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'

表示从文本的最开始查找一个以.或者0到9的数字开始的prod_name

参考:
《MySQL 必知必会》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章