**:
最近有需要用到求兩個字串是否有交集(原本想要求相似度的,暫時無法實現,只好轉為判斷是否存在交集的替代方案)方法,暫時找到以下2個方法。
方法一:正則
select concat(str1, ',') regexp concat(replace(str2,'
,','
,|'),'
,');
示例:
select'123|456|125
' regexp '
123|126
'; --
1select
'123
' regexp '
123|456
'; --
1select concat('
123,456
', '
,') regexp concat(replace('
456,789
',',
',',|
'),'
,'); --
1select concat('
123,456
', '
,') regexp concat(replace('
456,
',',
',',|
'),'
,'); --
1select concat('
電子資訊,科技
', '
,') regexp concat(replace('
軟體工程,電子資訊,概率統計
',',
',',|
'),'
,'); --
1select concat('
,', '
,') regexp concat(replace('
軟體工程,電子資訊,概率統計
',',
',',|
'),'
,'); --
0
方法二:
dropfunction
ifexists
`inte_array`;
--集合交集檢查函式
--@param varchar(255) seta a 集合 如 "1,3,5,9"
--@param varchar(255) setb b 集合 如 "8,2,3,7"
--@return int(1) b 集合內單元在 a集合 內存在則返回 1 否則返回 0
create definer=`root`@`localhost` function `inte_array` (seta varchar(255),setb varchar(255)) returns
int(1
) deterministic
begin
declare idx int
default
0 ; --
b 集合單元索引
declare
lenint
default
0;--
b 集合表示式長度
declare llen int
default
0;--
最後檢查位置
declare clen int
default
0;--
當前檢查位置
declare tmpstr varchar(255);--
臨時檢查資料集
declare curt varchar(255);--
b 當前檢查的單元
setlen
=length(setb);
while idx <
lendo
set idx = idx +
1;
set tmpstr =
substring_index(setb,",",idx);
set clen =
length(tmpstr);
--獲取當前 setb 中的單元
if idx =
1then
set curt =
tmpstr;
else
set curt =
substring(setb,llen+
2,clen-llen-
1);
endif
; --
檢查是否存在於 seta 中
if curt !=
''and find_in_set(curt,seta) >
0then
return
1;
endif
; --
當前檢查終點與上次檢查終點相同則跳出
if clen <= llen then
return
0;
endif
;
set llen =
clen;
endwhile
;
return
0;
end;
測試:
select inte_array("1,3,5,9","8,2,3,7") as is_inte_array; --1select inte_array("電子資訊,科技","電子資訊科技,軟體工程") as is_inte_array; --
0select inte_array("電子資訊,科技","電子資訊") as is_inte_array; --
1select inte_array("電子資訊,科技","電子資訊,科技") as is_inte_array; --1--
不應把單個逗號也算作交集
select inte_array(",","電子資訊,科技") as is_inte_array; --
0
迴圈遍歷兩個字串以逗號分隔
第一種,單個字串和多個逗號分隔的 第一步 定義2個字串 string receiver zhangsan,lisi,wangwu string receiver1 zhangsan 第二步 定義逗號分隔陣列 string str receiver split 第三步 迴圈比對 for inti 0 ...
MySql拼接兩個字串
mysql的查詢結果行欄位拼接,能夠用以下兩個函式實現 1.concat函式 mysql select concat 1 2 3 from test concat 1 2 3 123 假設連線串中存在null,則返回結果為null mysql select concat 1 2 null,3 fro...
如何判斷兩個字串相等
如果 name的值是管理員的話就走大括號里德 奇怪的是 現在這個條件怎麼也不成立了。無論name的值是不是管理員,程式死活就不走大括號離得 如果name是個控制項用tostring方法獲取的是該控制項的型別不是值 所以要先知道name是個什麼東東我估計不是這個問題.你除錯下獲取下name看下正常不 ...