加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle FIND_IN_SET函数

发布时间:2020-12-12 13:30:50 所属栏目:百科 来源:网络整理
导读:create or replace FUNCTION FIND_IN_SET(piv_str1 varchar2,piv_str2 varchar2,p_sep varchar2 := ';')? ?? RETURN NUMBER IS? ? ?? ? l_idx? ? number:=0; -- 用于计算piv_str2中分隔符的位置?? ? str? ? ? varchar2(500);? -- 根据分隔符截取的子字符串??
create or replace FUNCTION FIND_IN_SET(piv_str1 varchar2,piv_str2 varchar2,p_sep varchar2 := ';')? ??

RETURN NUMBER IS? ? ??

? l_idx? ? number:=0; -- 用于计算piv_str2中分隔符的位置??

? str? ? ? varchar2(500);? -- 根据分隔符截取的子字符串??

? piv_str? varchar2(500) := piv_str2; -- 将piv_str2赋值给piv_str??

? res? ? ? number:=0; -- 返回结果??

? loopIndex number:=0;

BEGIN??

-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1??

IF instr(piv_str,p_sep,1) = 0 THEN??

? ?IF piv_str = piv_str1 THEN? ?

? ? ? res:= 1;??

? ?END IF;??

ELSE??

-- 循环按分隔符截取piv_str??

LOOP??

? ? l_idx := instr(piv_str,p_sep);??

? ? ?loopIndex:=loopIndex+1;

-- 当piv_str中还有分隔符时??

? ? ? IF l_idx > 0 THEN??


? ?-- 截取第一个分隔符前的字段str??

? ? ? ? ?str:= substr(piv_str,1,l_idx-1);??

? ?-- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断??

? ? ? ? ?IF str = piv_str1 THEN? ?

? ? ? ? ? ?res:= loopIndex;??

? ? ? ? ? ?EXIT;??

? ? ? ? ?END IF;??

? ? ? ? piv_str := substr(piv_str,l_idx+length(p_sep));??

? ? ? ELSE??

? ?-- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1??

? ? ? ? IF piv_str = piv_str1 THEN? ?

? ? ? ? ? ?res:= loopIndex;??

? ? ? ? END IF;??

? ? ? ? -- 无论最后是否相等,都跳出循环??

? ? ? ? EXIT;??

? ? ? END IF;??

END LOOP;??

-- 结束循环??

END IF;??

-- 返回res??

RETURN res;??

END FIND_IN_SET;??


使用方法:select FIND_IN_SET('4','1;2;3;4') from dual;

? ? ? ? ? ? ? ? ?select ENG_NAME,INDUSTRY_SECTOR from HKY_ENG he WHERE FIND_IN_SET('化工石化医药',he.INDUSTRY_SECTOR) >0;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读