業(yè)務場景:我們對不同的業(yè)務邏輯進行數(shù)據(jù)處理時,多數(shù)是離不開需要模糊匹配的時候,比如要獲取該表某個字段中,含有某個具體的字符內(nèi)容,過濾出業(yè)務想要的數(shù)據(jù)。
?這里介紹有這么幾種:
一、MySQL通配符模糊查詢(%,_)
?通配符的分類
- "%" 百分號通配符: 表示任何字符出現(xiàn)任意次數(shù) (可以是0次)。
- "_" 下劃線通配符:表示只能匹配單個字符,不能多也不能少,就是一個字符。當然,也可以like "陳____",數(shù)量不限。
- like操作符:LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配進行比較;但如果like后面沒出現(xiàn)通配符,則在SQL執(zhí)行優(yōu)化時將 like 默認為 “=”執(zhí)行
注意: 如果在使用like操作符時,后面沒有使用通用匹配符(%或_),那么效果是和“=”一致的。在SQL執(zhí)行優(yōu)化時查詢優(yōu)化器將 like 默認為 “=”執(zhí)行,SELECT * FROM movies WHERE movie_name like 'A';只能匹配movie_name=“A”的結果,而不能匹配像“AA”或“AB”這樣的結果.
?
?
舉例:
--?模糊匹配含有“智能”字的數(shù)據(jù)
SELECT * from app where PROF like '%智能%';
-- 模糊匹配以“智能”字結尾的數(shù)據(jù),? 開頭則是 '智能%'
SELECT * from app where PROF like '%智能';
-- 查詢以“會”為結尾的,長度為三個字的數(shù)據(jù),如:"生日會", 兩個下劃線
SELECT * from dF where a like '__會';
二、MySQL內(nèi)置函數(shù)檢索(locate,position,instr)?
話接上文,通過內(nèi)置函數(shù)locate,position,instr進行匹配,相當于Java中的str.contains()方法,返回的是匹配內(nèi)容在字符串中的位置,效率和可用性上都優(yōu)于通配符匹配。
SELECT * from appF where INSTR(`app`, '%') > 0;
SELECT * from appF where LOCATE('%', `app`) > 0;
SELECT * from appF where POSITION( '%' IN `app`) > 0;
三個內(nèi)置函數(shù)很類似,這里就介紹 instr
返回字符串str中第一次出現(xiàn)子字符串substr的位置。INSTR()與LOCATE()的雙參數(shù)形式相同,只是參數(shù)的順序相反。
實例:
-- 用INSTR關鍵字進行模糊匹配,功能跟like一樣 ,等同于:"like '%智能%'"
SELECT * from app where INSTR(`PROF`, '智能');
?
三、MySQL基于regexp的正則匹配查詢
REGEXP 不支持通配符"%、_",支持正則匹配規(guī)則
-- REGEXP '智能' 等同于 like '%智能%'
SELECT * from app where appName REGEXP '智能';
-- 等同于
SELECT * from app where appName like '%智能%';
-- 支持 "|" ‘或’符號,匹配包含“中國”或“互聯(lián)網(wǎng)”或“大學”的數(shù)據(jù),支持疊加多個文章來源:http://www.zghlxwxcb.cn/news/detail-737905.html
SELECT * from app where appName REGEXP '中國|互聯(lián)網(wǎng)|大學';
?更多技巧細節(jié),參考:https://blog.csdn.net/qq_46940224/article/details/125031647文章來源地址http://www.zghlxwxcb.cn/news/detail-737905.html
到了這里,關于【業(yè)務功能篇07】Mysql 模糊查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!