Oracle 实现与mysql中find_in_set函数的兼容
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle 实现与mysql中find_in_set函数的兼容,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2019字,纯文字阅读大概需要3分钟。
内容图文
![Oracle 实现与mysql中find_in_set函数的兼容](/upload/InfoBanner/zyjiaocheng/901/6b01281e79d24e23af78fa392ee69402.jpg)
Oracle 实现与mysql中find_in_set函数的兼容
2018年03月23日 17:35:00?weixin_33757911?阅读数 176 ?find_in_set(str,strList),寻找str在strList中的位置。
sql代码:
- -- 返回结果为1,
- SELECT FIND_IN_SET('1','1,2,3') FROM DUAL;
sql代码:
- -- 返回结果为2
- SELECT FIND_IN_SET('1','2,1,3') FROM DUAL;
具体创建函数如下:
sql代码:
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; -- 返回结果
res_place number:=0;-- 原字符串在目标字符串中的位置
BEGIN
-- 如果字段是null 则返回0
IF piv_str2 IS NULL THEN
RETURN res;
END IF;
-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res_place=1
IF instr(piv_str, p_sep, 1) = 0 THEN
IF piv_str = piv_str1 THEN
res_place:=1;
res:= res_place;
END IF;
ELSE
-- 循环按分隔符截取piv_str
LOOP
l_idx := instr(piv_str,p_sep);
--
res_place := res_place + 1;
-- 当piv_str中还有分隔符时
IF l_idx > 0 THEN
-- 截取第一个分隔符前的字段str
str:= substr(piv_str,1,l_idx-1);
-- 判断 str 和piv_str1 是否相等,相等则结束循环判断
IF str = piv_str1 THEN
res:= res_place;
EXIT;
END IF;
piv_str := substr(piv_str,l_idx+length(p_sep));
ELSE
-- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=res_path
IF piv_str = piv_str1 THEN
res:= res_place;
END IF;
-- 无论最后是否相等,都跳出循环
EXIT;
END IF;
END LOOP;
-- 结束循环
END IF;
-- 返回res
RETURN res;
END FIND_IN_SET;
对于某些查询mysql只需写出表达式就可以了,但是我写的oracle的需要写出表达式出来
例如:
sql代码:
select * from tableA a left join tableB b on FIND_IN_SET(a.id ,b.aid) ; -- mysql这样写就可以了
sql代码:
select * from tableA a left join tableB b on FIND_IN_SET(a.id ,b.aid) >0; -- oracle就要写出具体的表达式
内容总结
以上是互联网集市为您收集整理的Oracle 实现与mysql中find_in_set函数的兼容全部内容,希望文章能够帮你解决Oracle 实现与mysql中find_in_set函数的兼容所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。