Oracle数据库 FIND_IN_SET函数
程序员文章站
2022-05-08 09:20:37
Oracle FIND_IN_SET函数数据库中有下方表格所示类型的一个列,每个值都是由ID拼接的字符串,用户希望能针对这个列做到数据检索,要求数据值只要包含传入值,即视为满足检索条件。直接写sqlselect t.* from TABLE_T t where instr(t.ids, '8') > 0结果如下上述的查询结果其实是不满足条件的,因为我传入一个’8’,按照正常情况应该只查询出第4条数据才对,但是因为’6,88’也包含了’8’,所以也查出来了。万能百度登场!方法二是较...
Oracle数据库 FIND_IN_SET函数
数据库中有下方表格所示类型的一个列,每个值都是由ID拼接的字符串,用户希望能针对这个列做到数据检索,要求数据值只要包含传入值,即视为满足检索条件。
直接写sql
select t.* from TABLE_T t where instr(t.ids, '8') > 0
结果如下
上述的查询结果其实是不满足条件的,因为我传入一个’8’,按照正常情况应该只查询出第4条数据才对,但是因为’6,88’也包含了’8’,所以也查出来了。
万能百度登场!
方法二是较为符合业务需求
但是,oracle 并没有这个函数!!!只好看一下前辈有没有造过类似的*,不失所望,真有!
参考地址:https://blog.51cto.com/xiaok007/2139728
函数具体实现如下:
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;
然后再运行一下sql
select t.* from TABLE_T t where find_in_set('8', t.ids) > 0
完美满足需求!
本文地址:https://blog.csdn.net/weixin_47691902/article/details/108977316
推荐阅读
-
Oracle数据库11g新特性:SQL Access Advisor
-
Oracle数据库完全恢复和不完全恢复以及执行用户管理备份恢复
-
Oracle数据库报bug,表或试图不存在,表名中包含空格
-
ThinkPHP 连接Oracle数据库的详细教程[全]_PHP
-
Oracle spatial 空间修正函数(SDO_UTIL.RECTIFY_GEOMETRY)_MySQL
-
加密oracle数据库存储过程或函数
-
打破oracle数据库树立的种种神话
-
Oracle Switchover RAC数据库提示ORA-600(kcctrdf_2)错误解决方案
-
Oracle数据库在Linux AS4升级
-
mysql 的 find_in_set函数使用方法