MYSQL 中判斷2個逗號分割的字串是否有交集

2021-10-03 18:24:25 字數 1553 閱讀 4716

drop function if exists  `inte_array`;

delimiter //

-- 集合交集檢查函式

-- @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 function `inte_array` (seta varchar(255),setb varchar(255)) returns int(1)

begin

declare idx int default 0 ; -- b 集合單元索引

declare len int default 0;-- b 集合表示式長度

declare llen int default 0;-- 最後檢查位置

declare clen int default 0;-- 當前檢查位置

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

declare curt varchar(255);-- b 當前檢查的單元

set len = length(setb);

while idx < len do

set idx = idx + 1;

set tmpstr = substring_index(setb,",",idx);

set clen = length(tmpstr);

-- 獲取當前 setb 中的單元

if idx = 1 then set curt = tmpstr;

else set curt = substring(setb,llen+2,clen-llen-1);

end if;

-- 檢查是否存在於 seta 中

if find_in_set(curt,seta) > 0 then return 1;

end if;

-- 當前檢查終點與上次檢查終點相同則跳出

if clen <= llen then return 0;

end if;

set llen = clen;

end while;

return 0;

end;

//delimiter ;

select inte_array("1,3,5,9","8,2,3,7") as is_inte_array;

--select inte_array("1,3,5,9","2,8,6,10") as is_inte_array;

--select inte_array("10,3,5,9","2,8,6,10") as is_inte_array;

--select inte_array("1,30,5,9","2,8,6,10") as is_inte_array;

--select inte_array("1,30,5,9","2,30,6,10") as is_inte_array;

mysql 逗號分割欄位的行列轉換

由於很多業務表因為歷史原因或者效能原因,都使用了違反第一正規化的設計模式,即同乙個列中儲存了多個屬性值。這種模式下,應用常常需要將這個列依據分隔符進行分割,並得到列轉行的結果 這裡使用substring index函式進行處理 建表語句 1 drop table ifexists tbl name ...

oracle用逗號分隔符分割的字段,轉換中文說明

經常碰到某些字段使用逗號等分隔符分割的配置,批量轉換成中文說明比較麻煩。目前想到使用正規表示式匹配,總體思路如下 先由一行用正規表示式提取分割成多行。再用參數列查詢中文名 再合成一行 引數中文說明表 select id,name from tab mb id name 501 很好 502 一般好 ...

Swift條件判斷中逗號的使用方法示例

在swift語言中,bool值是用來進行條件判斷的,可以進行 以及 的操作,從而實現多個表示式共同判斷。但是由於swift中存在可選項繫結,或者說是用let展開可選項的原因,有些地方條件判斷中不能夠使用 來進行處理。比如,我們要在變數hasvalue確實有值,且引數個數paramcount大於0的時...