zoukankan      html  css  js  c++  java
  • Oracle数据库按正则切割字符串

    1、方法一:

    SELECT regexp_substr('161,83,66,81','[0-9]+',1,LEVEL) FROM dual
    CONNECT 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) t
    CONNECT 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',','));
  • 相关阅读:
    HTML编写需要注意的事项
    Java中this、super用法
    多态性的表现形式
    面向对象
    用java实现冒泡排序法
    第一堂java web课
    mysql 复制中的 paxso 的两阶段和事务两阶段的区别
    github删除仓库
    git的介绍及使用
    github的介绍
  • 原文地址:https://www.cnblogs.com/suhfj-825/p/11510283.html
Copyright © 2011-2022 走看看