首页 > 数据库 >ORACLE 自定义函数,把字符串拆分为列/结果集

ORACLE 自定义函数,把字符串拆分为列/结果集

时间:2024-10-21 16:44:31浏览次数:1  
标签:RETURN STR 自定义 -- LIST 字符串 SEPARATOR KEY ORACLE

使用REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(key, '[^,]+', 1, ROWNUM) AS VALUE
FROM (
    select '1,3,4,4' as key from dual
) 
CONNECT BY ROWNUM <= LENGTH(key) - LENGTH(REPLACE(key, ',', '')) + 1
;

自定义函数:ODCIVARCHAR2LIST

CREATE OR REPLACE FUNCTION GET_LIST_BY_STRING
(
  KEY_STR IN VARCHAR2, -- KEY1,KEY2...KEYN
  SEPARATOR IN VARCHAR2 DEFAULT ',' --  分隔符
) RETURN SYS.ODCIVARCHAR2LIST
AS
  RETURN_LIST SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
  KEY_STR_CLONE VARCHAR2(32767) := KEY_STR; -- 临时字符串,用于处理输入字符串
  SEPARATOR_INDEX PLS_INTEGER := 1; -- 用于跟踪当前分隔符的位置
  ITEM_KEY VARCHAR2(32767); -- 用于存储每次拆分得到的子字符串
BEGIN
  -- 如果输入字符串为空或分隔符为空,则直接返回空列表
  IF KEY_STR IS NULL OR SEPARATOR IS NULL THEN
    RETURN RETURN_LIST;
  END IF;

  -- 循环拆分字符串,直到没有更多的分隔符为止
  LOOP
    -- 查找下一个分隔符的位置
    SELECT INSTR(KEY_STR_CLONE, SEPARATOR, 1, 1) INTO SEPARATOR_INDEX FROM DUAL;
    
    -- 如果找到了分隔符
    IF SEPARATOR_INDEX > 0 THEN
      -- 提取分隔符之前的子字符串
      ITEM_KEY := SUBSTR(KEY_STR_CLONE, 1, SEPARATOR_INDEX - 1);
      -- 将子字符串添加到列表中
      RETURN_LIST.EXTEND;
      RETURN_LIST(RETURN_LIST.COUNT) := ITEM_KEY;
      
      -- 更新临时字符串,去掉已经处理过的部分和分隔符
      KEY_STR_CLONE := SUBSTR(KEY_STR_CLONE, SEPARATOR_INDEX + LENGTH(SEPARATOR));
    ELSE
      -- 如果没有找到分隔符,则将剩余的字符串作为最后一个元素添加到列表中
      RETURN_LIST.EXTEND;
      RETURN_LIST(RETURN_LIST.COUNT) := KEY_STR_CLONE;
      -- 退出循环
      EXIT;
    END IF;
  END LOOP;

  -- 返回拆分后的列表
  RETURN RETURN_LIST;
END;
COMMIT;

 

标签:RETURN,STR,自定义,--,LIST,字符串,SEPARATOR,KEY,ORACLE
From: https://www.cnblogs.com/CRobot/p/18489794

相关文章

  • 【C#】【DevExpress】自定义单元格右键菜单,去除单元格编辑时,载入系统的默认菜单
    使用GridView,自定义单元格的右击菜单,可以通过监听事件PopupMenuShowing,实现新增菜单。1privatevoidgridView1_PopupMenuShowing(objectsender,DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgse)2{3GridViewview=senderasGridView;4if......
  • django admin 后台中添加自定义的 html 页面
    实现效果配置简历模板html文件{%extends"admin/base_site.html"%}{%blockcontent%}<h1>自定义HTML页面</h1><p>{{your_variable}}</p>{%endblock%}admin中添加代码,主要是get_urls以及对应的的视图fromdjango.urlsimportpathfromdjango......
  • 算法专题九: 哈希表与字符串
    目录哈希表1.两数之和2.判断是否为字符重拍排3.是否存在重复元素4.存在重复元素Ⅱ5.字母异位词分组字符串1.最长公共前缀2.最长回文子串3.二进制求和4.字符串相乘哈希表1.两数之和固定一个数,找前面有没有target-x这个数,使用哈希表,每次查找之后......
  • 洛谷题单指南-字符串-P4735 最大异或和
    原题链接:https://www.luogu.com.cn/problem/P4735题意解读:已知长度为n的数组a[],要在l~r范围找到一个p,使得a[p]^a[p+1]^...^a[n]^x最大,求这个最大的异或值。解题思路:1、利用前缀和将问题转化设s[]是a[]的前缀异或数组,要计算a中一段范围l~r的异或,可以借助于s由于s[r]=a[0]^a[......
  • 自定义组件-组件的创建和引用
    全局引用 局部引用全局引用VS局部引用组件和页面的区别 ......
  • 【题解】Solution Set - NOIP2024集训Day57 字符串
    【题解】SolutionSet-NOIP2024集训Day57字符串https://www.becoder.com.cn/contest/5653「CF213E」TwoPermutations「CF961F」k-substrings「CF580E」KefaandWatch「CF504E」MishaandLCPonTree......
  • 基于Python的自然语言处理系列(34):Huggingface 自定义分词器与数据集
            在自然语言处理(NLP)中,分词是将原始文本转换为模型可处理的数字形式的关键步骤。无论是情感分析、文本生成,还是问答系统,分词都决定了模型如何理解输入数据。Huggingface的transformers库提供了多种强大的分词工具,使我们可以灵活地加载、保存和使用预训练......
  • 算法笔记-字符串算法集合(未完)
    这里有一些别样的学习思路。KMP用途模式串匹配过程我们分解\(O(nm)\)的算法过程。如图,红色竖线包括的为目前匹配成功的部分,对于下一位\(i\):首先,如果成功匹配,那么匹配长度加一。否则,我们考虑失配情况。我们会将\(S\)串的匹配部分左端点向右移动一位,然后\(T\)串......
  • vue(vue.js)—自定义指令
    原文链接:vue(vue.js)—自定义指令–每天进步一点点vue中的自定义指令就是把原生的dom一些操作进行封装。1.函数形式需求:我们定义一个v-mult指令,和v-text类似,但是会将绑定的值翻倍。在vue中,用directives自定义函数,比如下面这样:<!DOCTYPEhtml><htmllang="en"> <......
  • SpringBoot使用默认的日志logback(2)—自定义配置+控制台输出sql语句
    原文链接:SpringBoot使用默认的日志logback(2)—自定义配置+控制台输出sql语句–每天进步一点点上一篇文章中简单介绍了springboot通过系统配置的方式配置日志:SpringBoot使用默认的日志logback(1)—系统配置这篇文章简单介绍一下日志的自定义配置。1.自定义配置springboot......