通配符
關鍵字 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 必知必會》