首頁 > 軟體

MySQL萬用字元與正規表示式搜過濾資料詳解

2022-10-02 14:01:38

萬用字元過濾

萬用字元:用來匹配值的一部分特殊字元。

萬用字元可以在搜尋模式中任意位置使用,並且可以使用多個萬用字元。

搜尋模式:由字面值、萬用字元或者兩者組合構成的搜尋條件。

語法(使用LIKE操作符):

SELECT [column_name]
FROM [table_name]
WHERE [column_name] LIKE '[string]';

萬用字元 %

‘%’ 表示任何字元出現任意次數,例如 LIKE ‘jet%’ 匹配詞jet起頭的值,‘%anvil%’ 匹配任何位置包含文字anvil的值。

注意

  • 根據MySQL的設定方式,搜尋可以是區分大小寫的;
  • ‘%’ 可以匹配0個字元;
  • 值的尾空格會干擾萬用字元匹配,最好在搜尋模式最後附加一個%;
  • ‘%’ 不能匹配NULL。

萬用字元 _

‘_’ 只匹配單個字元。

技巧

  • 不要過度使用萬用字元,因為這會很花時間;
  • 如有必要,使用萬用字元匹配在搜尋的最後;

正規表示式過濾

語法(使用REGEXP操作符):

SELECT [column_name]
FROM [table_name]
WHERE [column_name] REGEXP '[string]';

字元匹配

基本匹配:‘.’ 表示匹配任意一個字元。

正規表示式匹配不區分大小寫,使用BINARY關鍵字區分,例如WHERE prod_name REGEXP BINARY ‘JetPack .000’。

  • OR匹配:‘1000|2000’ 表示匹配1000或者2000。
  • 多字元匹配:‘[123]’ 表示匹配 1 或 2 或 3,是 [1|2|3] 的縮寫。

但是 ‘[1|2|3] Ton’ 和 ‘1|2|3 Ton’ 匹配結果並不相同,後者表示匹配 1 或 2 或 3 Ton。

  • 否定字元匹配:‘[^123]’ 表示匹配除這些字元外的任何東西。
  • 匹配範圍:‘[0-9]’ 與 ‘[0123456789]’ 相同。‘[a-z]’ 匹配任意字母字元。
  • 匹配特殊字元:使用跳脫字元 ‘’,例如 ‘.’ 、’ |’ 、‘[’ 、‘’。

其他字元

空白元字元

元字元說明
\f換頁
\n換行
\r回車
\t製表
\v縱向製表

字元類

說明
[:alnum:]任意字母和數位
[:alpha:]任意字元(同[a-zA-Z])
[:blank:]空格和製表
[:cntrl:]ASCII控制字元(0-31和127)
[:digit:]任意數位
[:graph:]與[:print:]相同,但是不包括空格
[:lower:]任意小寫字母
[:print:]任意可列印字元
[:punct:]既不在[:alnum:]也不在[:cntrl:] 中的任意字元
[:space:]包括空格在內的任意空白字元
[:upper:]任意大寫字元
[:xdigit:]任意十六進位制數位

重複元字元

元字元說明
*0個或多個匹配
+1個或多個匹配
?0個或多個匹配
{n}指定數目匹配
{n, }不少於指定數目的匹配
{n, m}匹配數目的範圍(m不超過255)

定位元字元

元字元說明
^文字的開始
$文字的結尾
[[:<:]]詞的開始
[[:>:]]詞的結尾

舉例:

SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\.]';

對比

如果匹配文字在列值中出現,則LIKE不會匹配,但是REGEXP會匹配。

可以通過用 ^ 開始每個表示式,用 $ 結束每個表示式,使得REGEXP的作用和LIKE一樣。

正規表示式測試

SELECT 'hello' REGEXP '[0-9]';	//結果返回0

總結

到此這篇關於MySQL萬用字元與正規表示式搜過濾資料的文章就介紹到這了,更多相關MySQL萬用字元與正則過濾資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com