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 必知必會》

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