mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)
一、find_in_set()
我們知道m(xù)ysql提供了一個(gè)好用的函數(shù)
FIND_IN_SET(str,strlist),
該函數(shù)的作用是查詢字段(strlist)中是否包含(str)的結(jié)果,
返回結(jié)果為null或記錄 。
str 要查詢的字符串
strlist 需查詢的字段,參數(shù)以”,”分隔,例如如 '1,2,3'。
下面有一組示例
select FIND_IN_SET('1', '1,2,3'); // 結(jié)果:1 select FIND_IN_SET('3', '1,2,3'); // 結(jié)果:3 select FIND_IN_SET('4', '1,2,3'); // 結(jié)果:0 // 后一個(gè)包含前一個(gè)返回大于0的元素所在位置,不包含前一個(gè)則返回0
我們一般在查詢的where條件使用 FIND_IN_SET(str,strlist)>0,則說(shuō)明strlist包含str
但是這個(gè)函數(shù)的第一個(gè)參數(shù)只能判斷是單個(gè)字符串,如果我有以下需求
1. 判斷字符串 '1,3' 中的元素是否有任意一個(gè)元素存在字符串 '1,3,4,5,7',意思就是1或者3只要有任意一個(gè)存在字符串 '1,3,4,5,7' 中就算匹配成功。
2. 再比如判斷字符串 '1,3,5' 中的所有元素是否都存在于字符串 '1,3,4,5,7' 中,即1,3,5每個(gè)元素都要在 字符串 '1,3,4,5,7'中能找到才算匹配成功。
針對(duì)需求1,提供了一個(gè)叫 FIND_PART_IN_SET 的函數(shù)
針對(duì)需求2,提供了一個(gè)叫 FIND_ALL_PART_IN_SET 的函數(shù)
二、FIND_PART_IN_SET
CREATE FUNCTION `FIND_PART_IN_SET`(str1 text, str2 text) RETURNS text BEGIN #傳入兩個(gè)逗號(hào)分割的字符串,判斷第二個(gè)字符串是否包含第一個(gè)字符串split之后的單個(gè) DECLARE CURRENTINDEX INT;#當(dāng)前下標(biāo) DECLARE CURRENTSTR text; DECLARE result int; set result = 0; set CURRENTINDEX = 0; set CURRENTSTR = ''; IF str1 IS NOT NULL AND str1 != '' THEN SET CURRENTINDEX = LOCATE(',', str1); WHILE CURRENTINDEX > 0 DO SET CURRENTSTR = substring(str1, 1, CURRENTINDEX - 1); if FIND_IN_SET(CURRENTSTR, str2)>0 THEN set result = 1; end if; SET str1 = substring(str1, CURRENTINDEX + 1); SET CURRENTINDEX = LOCATE(',', str1); END WHILE; #只傳一個(gè) 和 最后無(wú)逗號(hào)的情況 IF LENGTH(str1) > 0 THEN if FIND_IN_SET(str1, str2)>0 THEN set result = 1; end if; END IF; END IF; RETURN result; END;
實(shí)際調(diào)用判斷FIND_PART_IN_SET(str1 ,str2)>0即可,例如FIND_PART_IN_SET('1,3' , '1,3,4,5')>0
三、FIND_ALL_PART_IN_SET
CREATE FUNCTION `FIND_ALL_PART_IN_SET`(str1 text, str2 text) RETURNS text BEGIN #傳入兩個(gè)逗號(hào)分割的字符串,判斷第二個(gè)字符串是否全部包含第一個(gè)字符串split之后的單個(gè) DECLARE CURRENTINDEX INT;#當(dāng)前下標(biāo) DECLARE CURRENTSTR text; DECLARE RESULT int; DECLARE TOTALCOUNT int; DECLARE TRUECOUNT int; set RESULT = 0; set CURRENTINDEX = 0; set CURRENTSTR = ''; set TOTALCOUNT = 0; set TRUECOUNT = 0; IF str1 IS NOT NULL AND str1 != '' THEN SET CURRENTINDEX = LOCATE(',', str1); WHILE CURRENTINDEX > 0 DO SET TOTALCOUNT = TOTALCOUNT + 1; SET CURRENTSTR = substring(str1, 1, CURRENTINDEX - 1); if FIND_IN_SET(CURRENTSTR, str2)>0 THEN SET TRUECOUNT = TRUECOUNT + 1; end if; SET str1 = substring(str1, CURRENTINDEX + 1); SET CURRENTINDEX = LOCATE(',', str1); END WHILE; #只傳一個(gè) 和 最后無(wú)逗號(hào)的情況 IF LENGTH(str1) > 0 THEN SET TOTALCOUNT = TOTALCOUNT + 1; if FIND_IN_SET(str1, str2)>0 THEN SET TRUECOUNT = TRUECOUNT + 1; end if; END IF; END IF; IF TOTALCOUNT > 0 AND TRUECOUNT = TOTALCOUNT THEN SET RESULT = 1; END IF; RETURN result; END;
實(shí)際調(diào)用判斷FIND_ALL_PART_IN_SET(str1 ,str2)>0即可,例如FIND_PART_IN_SET('1,3,5' , '1,3,4,5,7')>0
到此這篇關(guān)于mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)的文章就介紹到這了,更多相關(guān)mysql find_in_set()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)詳解
- Mysql中find_in_set()函數(shù)用法詳解以及使用場(chǎng)景
- MySQL之FIND_IN_SET()的用法及說(shuō)明
- MySQL中find_in_set()函數(shù)用法示例詳解
- mysql中find_in_set()函數(shù)的使用及in()用法詳解
- mysql中find_in_set()函數(shù)的使用詳解
- mysql通過(guò)find_in_set()函數(shù)實(shí)現(xiàn)where in()順序排序
- Mysql中FIND_IN_SET()和IN區(qū)別簡(jiǎn)析
相關(guān)文章
MySQL rand函數(shù)實(shí)現(xiàn)隨機(jī)數(shù)的方法
在mysql中,使用隨機(jī)數(shù)寫(xiě)一個(gè)語(yǔ)句能一下更新幾百條MYSQL數(shù)據(jù)嗎?答案是肯定的,使用MySQL rand函數(shù),就可以使現(xiàn)在隨機(jī)數(shù)2016-09-09關(guān)于MySQL 大批量插入時(shí)如何過(guò)濾掉重復(fù)數(shù)據(jù)
這篇文章主要介紹關(guān)于MySQL 大批量插入時(shí)如何過(guò)濾重復(fù)數(shù)據(jù),比如線上庫(kù)有6個(gè)表存在重復(fù)數(shù)據(jù),其中2個(gè)表比較大,96萬(wàn)+和30萬(wàn)+,因?yàn)橹疤幚磉^(guò)相同的問(wèn)題,就直接拿來(lái)了上次的Python去重腳本,腳本很簡(jiǎn)單,就是連接數(shù)據(jù)庫(kù),查出來(lái)重復(fù)數(shù)據(jù),循環(huán)刪除,需要的朋友可以參考下2021-09-09mysql學(xué)習(xí)筆記之完整的select語(yǔ)句用法實(shí)例詳解
這篇文章主要介紹了mysql學(xué)習(xí)筆記之完整的select語(yǔ)句用法,結(jié)合實(shí)例形式詳細(xì)分析了mysql select語(yǔ)句各種常見(jiàn)參數(shù)、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04mysql備份恢復(fù)mysqldump.exe幾個(gè)常用用例
收集了,一個(gè)整理不錯(cuò)的,mysql備份與恢復(fù)用法2008-08-08