zoukankan      html  css  js  c++  java
  • oracle之字符串拆分

    在工作当中发现oracle没有提供字符串切割函数,在网上找到一个比好的切割方式,记录一下:

    1.新建数据类型

    CREATE OR REPLACE TYPE STR_SPLIT AS TABLE OF VARCHAR2(500);

    2.新建切割函数

    CREATE OR REPLACE FUNCTION SPLITSTR(P_STRING
      IN VARCHAR2, 
    
     P_DELIMITER IN VARCHAR2) 
    
     RETURN STR_SPLIT 
    
     PIPELINED IS 
    
     V_LENGTH NUMBER := LENGTH(P_STRING); 
    
     V_START NUMBER := 1; 
    
     V_INDEX NUMBER; 
    
    BEGIN 
    
     WHILE (V_START <= V_LENGTH) LOOP 
    
     V_INDEX := INSTR(P_STRING, P_DELIMITER, V_START); 
    
     IF V_INDEX = 0 THEN 
    
     PIPE ROW(SUBSTR(P_STRING, V_START)); 
    
     V_START := V_LENGTH + 1; 
    
     ELSE 
    
     PIPE ROW(SUBSTR(P_STRING, V_START, V_INDEX - V_START)); 
    
     V_START := V_INDEX + 1; 
    
     END IF; 
    
     END LOOP; 
    
     RETURN; 
    
    END SPLITSTR; 

    3.进行测试

    select * from table(splitstr('Hello,Cnblogs!',',')); 

    4.将行转为列显示

    SELECT A.COLUMN_VALUE V1, B.COLUMN_VALUE V2
      FROM (SELECT *
              FROM (SELECT ROWNUM RN, T.*
                      FROM TABLE(SPLITSTR('Hello,Cnblogs!', ',')) T)) A,
           (SELECT *
              FROM (SELECT ROWNUM RN, T.*
                      FROM TABLE(SPLITSTR('Hello,Cnblogs!', ',')) T)) B
     WHERE A.RN = 1
       AND B.RN = 2;

    待补充测试结果

  • 相关阅读:
    STL中set求交集、并集、差集的方法
    Vijos 1308 埃及分数(迭代加深搜索)
    POJ 1161 Walls(Floyd , 建图)
    UVa 1601 万圣节后的早晨
    dp之完全背包
    dp之取数字问题
    dp之最长公共子序列
    枚举排列
    poj 3187 暴力枚举
    poj 2431 优先队列,贪心
  • 原文地址:https://www.cnblogs.com/jwangpip/p/9460847.html
Copyright © 2011-2022 走看看