LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

快速學會SQL中正則表達式REGEXP的使用技巧

admin
2024年2月7日 21:56 本文熱度 804

在 SQL 查詢語句中,REGEXP 是一個強大的正則表達式匹配運算符,用于在字符串中執(zhí)行復(fù)雜的模式匹配。通過 REGEXP,用戶可以定義自己的匹配模式,對數(shù)據(jù)進行精確或模糊的搜索,從而有效地處理各種復(fù)雜模式的字符串搜索需求。這為數(shù)據(jù)提取和處理提供了極大的便利。


正則表達式使用REGEXP命令進行匹配時,匹配成功,則返回結(jié)果為真(1),否則返回結(jié)果為假(0)。


由于LIKE跟REGEXP都是用于字符串模式匹配,這里為了節(jié)省空間,本篇文章將沿用之前LIKE篇章中所采用的測試數(shù)據(jù)作為演示。



 01. 

REGEXP的語法


在SQL查詢語句中,REGEXP的基本語法如下:

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名1 REGEXP '正則表達式匹配模式';

其中:

SELECT 列名1, 列名2, ...選擇要檢索的列。


FROM 表名指定要從中檢索數(shù)據(jù)的表。


WHERE 列名1 REGEXP '正則表達式匹配模式'這部分是查詢的條件,使用REGEXP運算符來過濾結(jié)果。只有滿足正則表達式匹配模式的行才會被返回。


正則表達式由特殊字符和元字符組成,用于定義搜索模式。以下是一些常見的正則表達式元字符。

  • ^:匹配字符串的開頭

  • $匹配字符的結(jié)尾

  • .匹配任意單個字符

  • |:跟or類似,表示或

  • *匹配前面的字符或子模式零次或多次

  • +匹配前面的字符或子模式1次或多次

  • ?匹配前面的字符或子模式零次或1次

  • []:匹配括號內(nèi)的任意一個字符

  • [^]:匹配不在括號內(nèi)的任意一個字符

  • [a-z]:匹配范圍內(nèi)的任意一個字符




 02. 

REGEXP的基本用法


在日常工作中,我們經(jīng)常使用REGEXP進行復(fù)雜的數(shù)據(jù)匹配和篩選,以下是關(guān)于REGEXP操作符的常見用法。


1. 搜索以特定字符或字符串開頭的值

倘若,我們想要查詢名字中以"古"字開頭的員工,可以使用以下SQL語句:

SELECT * FROM tb_employees WHERE name REGEXP '^古';

查詢結(jié)果如下:


2. 搜索以特定字符或字符串結(jié)尾的值

倘若,我們想要查詢名字中以"音"字結(jié)尾的員工,可以使用以下SQL語句:

SELECT * FROM tb_employees WHERE name REGEXP '音$';

查詢結(jié)果如下:


3. 搜索包含特定字符或字符串的值

倘若,我們想要查詢名字中包含"鳳"字,且年齡大于16的員工,可以使用以下SQL語句:

SELECT * FROM tb_employees WHERE name REGEXP '鳳' AND age > 16;

可以看到,要查詢名字中包含特定字(例如"鳳")的員工,當我們使用 REGEXP 時,不需加任何匹配規(guī)則,只需用單引號或雙引號來包圍字符即可,相當于LIKE '%%'注意,REGEXP 中沒有LIKE的%和_通配符


查詢結(jié)果如下:


那如果想要查詢名字中含有下劃線的員工,可以使用以下SQL語句。

SELECT * FROM tb_employees WHERE name REGEXP '_'

可以看到,使用REGEXP進行模式匹配,不需要像LIKE那樣要使用轉(zhuǎn)義符


查詢結(jié)果如下:


倘若,我們想要查詢名字中含有c,且c前面包含r或b的員工。可以使用以下SQL語句:

SELECT * FROM tb_employees WHERE name REGEXP '[br]c';

這個查詢會搜索name中包含 bc、rc 的記錄。若調(diào)整c的位置,c[br],則會搜索name中包含cb、cr的記錄。


這條語句的查詢結(jié)果如下:


想要查找名字中含有小寫字母的員工,可以使用以下SQL語句

SELECT * FROM tb_employees WHERE name REGEXP '^[a-z]';

默認情況下,REGEXP是不區(qū)分大小寫的查詢結(jié)果跟上圖一致,返回abc、abrc的記錄。


如果我們想找到所有名字中包含"古"或"音"的員工,可以使用以下SQL語句

-- 方法1
SELECT * FROM tb_employees WHERE name REGEXP '[古音]';

-- 方法2
SELECT * FROM tb_employees WHERE name REGEXP '古|音';

查詢結(jié)果如下:


4. 搜索包含特定長度的字符或字符串的值

倘若,我們想要查詢名字長度為2個字符的員工,可以使用以下SQL語句:

SELECT * FROM tb_employees WHERE name REGEXP '^.{2}$';

在這個語句中^ 表示字符串的開頭,$ 表示字符串的結(jié)尾,.{2} 表示匹配任意兩個字符,.表示任意字符,{2} 表示恰好匹配兩次


查詢結(jié)果同上圖結(jié)果一致,只返回古晉跟阿音2人。


通過上述示例,我們發(fā)現(xiàn)REGEXP與LIKE功能相似,但更為強大。它能夠?qū)崿F(xiàn)復(fù)雜且獨特的規(guī)則匹配。


🌟 注意:

1、在正則表達式中,使用括號()可以創(chuàng)建捕獲組,將括號內(nèi)的內(nèi)容作為一個整體進行匹配。例如,正則表達式(ABC)會匹配整個字符串"ABC"。


2、REGEXP默認采用部分匹配原則,即只要有一個匹配項,就會返回真。


3、盡管REGEXP的功能強大且靈活,在處理復(fù)雜模式匹配時也是不可或缺,但在處理大量數(shù)據(jù)時,其性能可能會受到影響。因此,在編寫復(fù)雜的正則表達式時,我們應(yīng)注重優(yōu)化以提高查詢效率。在必要時,還需考慮采用其他方法,如數(shù)據(jù)預(yù)處理或索引,以進一步改善查詢性能。當然,對于簡單的查詢,使用LIKE操作符可能更為合適且高效。


關(guān)于SQL 中的正則表達式REGEXP,本次分享就到這了。希望這個系列能幫助大家更深入地理解和運用數(shù)據(jù)庫。


該文章在 2024/2/7 21:56:33 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
色在线中文字幕大 | 亚洲日韩欧美视频 | 亚洲综合中文字幕在线一区 | 亚洲精品色在线 | 亚洲中文aⅴ中文字幕在线 中文字幕一级大片 | 五月在线婷婷视频 |