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;0 :表示不是子集 1 表示是子集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 ;
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字串轉為小寫字串從字串開始和...