使用Oracle分割逗号分隔的字符串

时间:2019-02-04 15:39:39

标签: sql oracle split

我有一个查询,它以这样的方式完全拉出用逗号分隔的文本内容:

INSERVICE JOB #: N19020200001 
SERVICE_CENTER:SBY,OH_CIRCUIT:MALTA8501,CREW:3675,URD_PRINT:STG-123/S1,FEEDER:PFB969,ISOLATED_1:SCC-1-B969,ISOLATED_2:UDTB969-5,RECONDUCTOR:Y,JACKETED_CABLE:N,CABLE_CART:N,LIVE_FRONT:N,BOOM:null,BACK_HOE:null,EASY_HAULING:null

SQL中是否有一种方法可以将其选择/划分为单独的字段,如下所示(它始终与上面的内容一致):

enter image description here

1 个答案:

答案 0 :(得分:0)

我有一个自定义的字符串解析器函数,您可以使用...

注意:对于标题,您可以将它们替换为REPLACE('HEADER','')并用逗号获取值...

您可以检查以下代码并在您的数据库中使用它:

  FUNCTION STRING_PARSER(VAL VARCHAR2, POSITION VARCHAR2, DELIMITER VARCHAR2) RETURN VARCHAR2 IS
    v_pos3 number;
    v_pos4 number;
  BEGIN

    /* Return 3rd occurrence of '_' */
    v_pos3 := INSTR(VAL, DELIMITER, 1, POSITION) + 1;

    /* Return 4rd occurrence of '_' */
    v_pos4 := INSTR(VAL, DELIMITER, 1, POSITION + 1);

    return SUBSTR(VAL, v_pos3, v_pos4 - v_pos3);

  END;

用法:

select report_tools_pkg.string_parser(',1,2,3',2,',') from dual

注意:添加一个','|| sql的列名(如果要使用),按原样...