mysql 判斷字串是否為其他字串的子集

2022-03-22 14:18:20 字數 2795 閱讀 5899

1.mysql 提供單個用逗號隔開判斷某個字串是否包含在其他字串的之內:find_in_set('需要匹配的字串','源字串');

demo: select find_in_set('111','111,22,3333,43') from user;  -- user 是測試表名

返回值:

select find_in_set('7777','111,22,3333,43') from user;

返回值:

總結:find_in_set 方法 若包含則返回1 否則返回0;

2:當遇到多個字串進行匹配的時候,find_in_set 並不能符合需求,這裡是韋恩圖的子集邏輯

demo   stra='11,2,5'   strb='0,11,6,5,2,8'    判斷 stra是否是strb的子集

mysql 自帶函式:substring_index('11,2,5' ,0)  返回值:11

substring(stra,3)   返回:『2,5』

思路:將stra中的子字串逐一和strb中的字串進行比對,只要有乙個不存在則返回失敗

第一步:substring_index(stra,1)方法能獲取通過逗號分割的字串,temp_str=substring_index(stra,1);

第二步:將獲取的字串用find_in_set (temp,strb) 進行匹配,若沒有與之匹配則將標誌位設為失敗狀態,並且return

第三步:將已經匹配過的字串丟棄substring(stra,tempstrlen+1);

重複上述步驟

函式:

drop function if exists fn_sos_product_in_shop;

create function fn_sos_product_in_shop(v_product_conditions varchar(255),v_shop_tags varchar(255)) returns int(1)

begin

declare success_flag int default 0; -- 子集標誌位 0 預設不是子集,1 是子集

declare cd_length int default 0; -- 被擷取之後字串的剩餘長度

declare temp_lenth int default 0; -- 臨時擷取的字元長度

declare check_str varchar(255); -- 臨時檢查資料集

declare live_str varchar(255); -- 剩餘的字串

if (isnull(v_product_conditions) = 1)||(char_length(trim(v_product_conditions))=0)

then set success_flag = 0;

return success_flag;

end if;

if (isnull(v_shop_tags) = 1)||(char_length(trim(v_shop_tags))=0)

then set success_flag = 0;

return success_flag;

end if;

set cd_length=char_length(v_product_conditions);

while cd_length >= 1 do

set check_str=substring_index(v_product_conditions,',',1); -- 獲取第乙個子字串

if  char_length(trim(check_str))>0  -- 這是為了過濾掉空的分割 如:'aaa,,bbb' 中間有多個空逗號

if find_in_set(check_str,v_shop_tags) = 0 -- 0 表示未匹配上

then set success_flag=0;

return success_flag;

end if;

end if;

set v_product_conditions=substring(v_product_conditions,char_length(check_str)+2); -- 獲取剩餘要匹配的字串

set cd_length=cd_length-char_length(check_str)-1; -- 剩餘的字元長度

set success_flag=1; -- 成功

end while;

return success_flag;

end ;

0 :表示不是子集 1 表示是子集

select  fn_sos_product_in_shop('111','111,222,333') from user;

返回值:

select fn_sos_product_in_shop('111,55','111,222,333') from sos_shop;

返回值:

重點:1.為什麼不用length 而用char_length length統計的是位元組長度,在mysql資料庫中乙個漢字佔三個字元,當都不是漢字的可以用length.char_length 統計字元,不管是否是漢字統計的長度都是一樣的。

2.對於substring 為什麼要加2?

MySql 如何判斷字串是否為數字

大部分數字都是用int或者bigint儲存,但是也有部分欄位會用字串儲存數字,所以,當我們需要判斷字串格式是否全為數字的時候,就會遇到該問題了。那麼,怎麼判斷呢?採用mysql的 regexp運算子 regexp 0 9.前面的字串是我們要做判斷的,後面的字串是mysql的正規表示式,意思是 匹配不...

判斷字串是否為空

判斷字串是否為空是在 android 開發中是最長用的乙個判斷,判斷時也經常會看到有不同的判斷方式,今天專門研究了一下,記錄下來。先定義乙個字串,private string s 這種定義方式是我們學用的方式,那麼這樣定義時在字串時,該怎麼判斷它是不是空呢?來用 驗證一下 if s null els...

判斷字串是否為回文串

題目 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false字串轉為小寫字串從字串開始和...