博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle数据库按正则切割字符串
阅读量:4958 次
发布时间:2019-06-12

本文共 1285 字,大约阅读时间需要 4 分钟。

1、方法一:

SELECT regexp_substr('161,83,66,81','[0-9]+',1,LEVEL) FROM dualCONNECT BY  level <= length('161,83,66,81') - length(regexp_replace('161,83,66,81',',','')) + 1;

另附流程备份如下(注意最后的分号在流程中是否需要):

SELECT ID ,DEPARTMENTID ,LASTNAME  FROM HRMRESOURCE WHERE LOGINID IS NOT NULL AND DEPARTMENTID IN(SELECT regexp_substr(t.deptid,'[0-9]+',1,LEVEL) FROM (SELECT (CASE to_char(DEPARTMENTID) WHEN to_char(161)THEN 161||','||81||','||66||','||83 ELSE to_char(DEPARTMENTID) END ) deptid FROM HRMRESOURCE WHERE DEPARTMENTID = 161) tCONNECT BY  level <= length(t.deptid) - length(regexp_replace(t.deptid,',','')) + 1) AND LASTNAME NOT LIKE '%离职%';

 2、方法二:

CREATE OR REPLACE TYPE SPLIT_STR AS TABLE OF VARCHAR2(100);CREATE OR REPLACE FUNCTION split_strs(str VARCHAR2 ,reg VARCHAR2)RETURN SPLIT_STR  PIPELINED  IS  V_LENGTH NUMBER := LENGTH(str);  V_START NUMBER := 1;  V_INDEX NUMBER;  BEGIN    WHILE V_START <= V_LENGTH LOOP      V_INDEX := INSTR(str, reg, V_START);      IF V_INDEX = 0 THEN      PIPE ROW(SUBSTR(str, V_START));      V_START := V_LENGTH + 1;      ELSE      PIPE ROW(SUBSTR(str, V_START, V_INDEX - V_START));      V_START := V_INDEX + 1;      END IF;    END LOOP;    RETURN ;  END;SELECT * FROM TABLE (split_strs('1,2,3,4,5',','));

 

转载于:https://www.cnblogs.com/suhfj-825/p/11510283.html

你可能感兴趣的文章
sha1 加密 2...
查看>>
[GX/GZOI2019]旧词(树上差分+树剖+线段树)
查看>>
第509篇-Delegate和Event异同--(内容篇5:共6篇)
查看>>
设计模式--6大原则--开闭原则
查看>>
高德地图JSapi
查看>>
团队协作第八周个人PSP
查看>>
centos-linux热拔插scsi硬盘
查看>>
五周总结学习笔记
查看>>
docker 应用-2(Dockerfile 编写以及镜像保存提交)
查看>>
编码GBK的不可映射字符
查看>>
Response.ContentType 详细列表
查看>>
list集合转换成datatable
查看>>
九度 1551 切蛋糕(数学)
查看>>
1.4 使用电脑测试MC20的接收英文短信功能
查看>>
JavaScript学习笔记——FromData上传文件
查看>>
tomcat内存溢出设置JAVA_OPTS
查看>>
java之mybatis之查询及分页
查看>>
有上下界网络流
查看>>
把表中名为'诺基亚xxxx'的商品,改为'HTCxxxx',
查看>>
newcode网学习笔记(1)
查看>>