mysql判斷兩個字串(以逗號分隔)是否存在交集

2022-07-07 22:30:17 字數 2993 閱讀 3108

**:

最近有需要用到求兩個字串是否有交集(原本想要求相似度的,暫時無法實現,只好轉為判斷是否存在交集的替代方案)方法,暫時找到以下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

方法二:

drop

function

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看下正常不 ...