如下展示了两种场景,按需要自取
若结果值查询包含8的,利用语句 instr(t.ids, '8') > 0,结果如下,
结果会包含88的,这不是想要的结果,因此有了下面的函数
CREATE OR REPLACE FUNCTION FIND_IN_SET(fieid varchar2, params varchar2, p_sep varchar2 := ',')
l_idx number:=0; -- 用于计算fieid中分隔符的位置
str varchar2(500); -- 根据分隔符截取的子字符串
piv_str varchar2(500) := fieid; -- 将fieid赋值给piv_str
-- 如果piv_str中没有分割符,直接判断params和piv_str是否相等,相等 res=1
IF instr(piv_str, p_sep, 1) = 0 THEN
l_idx := instr(piv_str,p_sep);
-- 截取第一个分隔符前的字段str
str:= substr(piv_str,1,l_idx-1);
-- 判断 str 和params 是否相等,相等 res=1 并结束循环判断
piv_str := substr(piv_str,l_idx+length(p_sep));
-- 当截取后的piv_str 中不存在分割符时,判断piv_str和params是否相等,相等 res=1
select t.* from TABLE_T t where find_in_set( t.ids,'8') > 0