欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)

 更新時間:2024年08月13日 11:51:56   作者:@步行者@  
MySQL 中的 FIND_IN_SET 函數(shù)用于在逗號分隔的字符串列表中查找指定字符串的位置,本文就來介紹一下mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)

一、find_in_set()

我們知道m(xù)ysql提供了一個好用的函數(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
// 后一個包含前一個返回大于0的元素所在位置,不包含前一個則返回0

我們一般在查詢的where條件使用 FIND_IN_SET(str,strlist)>0,則說明strlist包含str

但是這個函數(shù)的第一個參數(shù)只能判斷是單個字符串,如果我有以下需求

1. 判斷字符串 '1,3' 中的元素是否有任意一個元素存在字符串 '1,3,4,5,7',意思就是1或者3只要有任意一個存在字符串 '1,3,4,5,7' 中就算匹配成功。

2. 再比如判斷字符串 '1,3,5' 中的所有元素是否都存在于字符串 '1,3,4,5,7' 中,即1,3,5每個元素都要在 字符串 '1,3,4,5,7'中能找到才算匹配成功。

針對需求1,提供了一個叫 FIND_PART_IN_SET  的函數(shù)

針對需求2,提供了一個叫 FIND_ALL_PART_IN_SET 的函數(shù)

二、FIND_PART_IN_SET

CREATE FUNCTION `FIND_PART_IN_SET`(str1 text, str2 text)
    RETURNS text
BEGIN
    #傳入兩個逗號分割的字符串,判斷第二個字符串是否包含第一個字符串split之后的單個
    DECLARE CURRENTINDEX INT;#當前下標
    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;
        #只傳一個 和 最后無逗號的情況
        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;

實際調(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
    #傳入兩個逗號分割的字符串,判斷第二個字符串是否全部包含第一個字符串split之后的單個
    DECLARE CURRENTINDEX INT;#當前下標
    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;
        #只傳一個 和 最后無逗號的情況
        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;

實際調(diào)用判斷FIND_ALL_PART_IN_SET(str1 ,str2)>0即可,例如FIND_PART_IN_SET('1,3,5' , '1,3,4,5,7')>0 

到此這篇關于mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)的文章就介紹到這了,更多相關mysql find_in_set()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Navicat連接不上MySQL的問題解決

    Navicat連接不上MySQL的問題解決

    最近遇到了一件非常棘手的問題,用Navicat遠程連接數(shù)據(jù)庫居然連接不到,真是頭都大了,下面這篇文章主要給大家介紹了關于Navicat連接不上MySQL的問題解決,需要的朋友可以參考下
    2023-02-02
  • MySQL rand函數(shù)實現(xiàn)隨機數(shù)的方法

    MySQL rand函數(shù)實現(xiàn)隨機數(shù)的方法

    在mysql中,使用隨機數(shù)寫一個語句能一下更新幾百條MYSQL數(shù)據(jù)嗎?答案是肯定的,使用MySQL rand函數(shù),就可以使現(xiàn)在隨機數(shù)
    2016-09-09
  • MySQL中使用序列Sequence的方式總結(jié)

    MySQL中使用序列Sequence的方式總結(jié)

    序列是一組整數(shù)如1,2,3,...為了在需要時生成的,這篇文章主要給大家介紹了關于MySQL中使用序列Sequence的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • 關于MySQL 大批量插入時如何過濾掉重復數(shù)據(jù)

    關于MySQL 大批量插入時如何過濾掉重復數(shù)據(jù)

    這篇文章主要介紹關于MySQL 大批量插入時如何過濾重復數(shù)據(jù),比如線上庫有6個表存在重復數(shù)據(jù),其中2個表比較大,96萬+和30萬+,因為之前處理過相同的問題,就直接拿來了上次的Python去重腳本,腳本很簡單,就是連接數(shù)據(jù)庫,查出來重復數(shù)據(jù),循環(huán)刪除,需要的朋友可以參考下
    2021-09-09
  • MySQL Order By索引優(yōu)化方法

    MySQL Order By索引優(yōu)化方法

    在一些情況下,MySQL可以直接使用索引來滿足一個 ORDER BY 或 GROUP BY 子句而無需做額外的排序
    2012-07-07
  • mysql學習筆記之完整的select語句用法實例詳解

    mysql學習筆記之完整的select語句用法實例詳解

    這篇文章主要介紹了mysql學習筆記之完整的select語句用法,結(jié)合實例形式詳細分析了mysql select語句各種常見參數(shù)、使用方法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • mysql合并字符串的實現(xiàn)

    mysql合并字符串的實現(xiàn)

    這篇文章主要介紹了mysql合并字符串的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql備份恢復mysqldump.exe幾個常用用例

    mysql備份恢復mysqldump.exe幾個常用用例

    收集了,一個整理不錯的,mysql備份與恢復用法
    2008-08-08
  • MySQL8.0.32的安裝與配置超詳細圖文教程

    MySQL8.0.32的安裝與配置超詳細圖文教程

    這篇文章主要介紹了MySQL8.0.32的安裝與配置超詳細圖文教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • mysql安裝配置方法圖文教程(CentOS7)

    mysql安裝配置方法圖文教程(CentOS7)

    這篇文章主要為大家詳細介紹了centos7下mysql安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論