首页 > 数据库 >ORACLE自定义实现FIND_IN_SET函数

ORACLE自定义实现FIND_IN_SET函数

时间:2023-03-10 17:23:52浏览次数:66  
标签:SET 自定义 -- res str ORACLE FIND piv

FIND_IN_SET是mysql中的函数,见:MySQL中FIND_IN_SET函数

oracle中没有FIND_IN_SET函数,oracle自定义实现FIND_IN_SET函数sql如下:

-- FIND_IN_SET函数
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;
/

FIND_IN_SET函数使用示例如下

 

标签:SET,自定义,--,res,str,ORACLE,FIND,piv
From: https://www.cnblogs.com/kiko2014551511/p/17204093.html

相关文章

  • java自定义类数组的初始化
    也就是说,在声明了自定义类的数组之后,对每一个数组元素的初始化,都要为其new一个对象出来使得指针指向该对象,Java语言本身是不提供在自定义类数组声明时候自动创建新对象的方......
  • Vulnhub之Sunset:Sunrise靶机详细测试过程
    Sunrise靶机信息名称:sunset:sunrise地址:https://www.vulnhub.com/entry/sunset-sunrise,406/识别目标主机IP地址(kali㉿kali)-[~/Desktop/Vulnhub/Sunrise]└─$......
  • swift 属性观察者 willset didset 类型属性 class static
    willSet会在该值被存储之前被调用didSet会在一个新值被存储后调用如果你实现了一个willSet观察者,新的属性值会以常量形式参数传递。你可以在你的willSet实现中为这个参数......
  • IntelliJ IDEA Community Setup
    卸载旧版本时勾选"Deletecachesandlocalhistory""Deletesettingsandinstalledplugins"以完全删除 自定义安装路径 设置选项:CreateDesktopShortcut在......
  • C#中连接Oracle数据库
    1、nuget添加 Oracle.ManagedDataAccess  2、连接字符串配置<connectionStrings> <!--连接字符串--> <addname="FeesConn"connectionString="UserId=sa;passwo......
  • Mybatis+Oracle 返回自增字段值
    <insertuseGeneratedKeys="true"keyProperty="id"keyColumn="id"></insert>#useGeneratedKeys需要数据库本身支持字段自增的<insertid="insertUser"parameterTyp......
  • Oracle创建自增列的两种方式
    Oracle含有序列的事务进行回滚,序列不会回到事务前状态。--方法一:序列--Createdon2023/3/10by112691declare--Localvariablesherev_cntnumber;begi......
  • java自定义注解实现字段格式化(二)
    上篇java自定义注解实现字段格式化 我们自定义了另一个浮点数格式化的注解一、格式化处理器接口但在实际生产中,处理浮点数的格式化,可能还会有其他数据的格式化,比如日期......
  • LayoutAnimationController,补间动画,属性动画,值动画,自定义动画,帧动画
    最好的代码永远是自己写出来的布局<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools......
  • jquery获取设置元素宽高位置height()、width()、offset()、position()、scrollTop()、
    ​​​​全栈工程师开发手册(作者:栾鹏)​​jquery系列教程2-style样式操作全解​​jquery获取设置元素宽高位置jquery的通过height()、width()、offset()、position()、s......