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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-10-21 NET 在一个数组中查找另一个数组所在起始位置(下标从0开始,未找到返回-1)
2019-10-21 NET 判断是否为回文