欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

一字段含有逗号分隔的串,把这条记录按逗号分隔分成多条记录,具体如下

更新时间: 2014-01-05 02:12:31 责任编辑: Author_N1

 

一字段含有逗号分隔的串,把这条记录按逗号分隔分成多条记录,具体如下,在线等
CREATE TABLE T_INFO
(
       T_PERSON_ID NUMBER,
       T_PERSON_NAME VARCHAR(20),
       T_TYPE_ID VARCHAR(200)
);
INSERT INTO T_INFO 
SELECT 1, '张三', '1,2' FROM DUAL UNION ALL 
SELECT 2, '李四', '1' FROM DUAL

/*
结果
3 2 李四 1
1 1 张三 2
1 1 张三 1

把1 1 张三 1,2
这条记录分成
1 1 张三 2
1 1 张三 1
*/

--参考方法--
引用:
结果
    2    李四    1
    1    张三    2
    1    张三    1



select t_person_id,
       t_person_name,
       REGEXP_SUBSTR(t_type_id, '[^,]+', 1, LEVEL) STR
  from T_INFO
CONNECT BY LEVEL <= REGEXP_COUNT(t_type_id, ',') + 1
       and t_person_id = prior t_person_id
       and prior dbms_random.value is not null;

T_PERSON_ID T_PERSON_NAME        STR
----------- -------------------- 
          1 张三                 1
          1 张三                 2
          2 李四                 1

--参考方法--
我用的PL/SQL写的
DECLARE
  I       NUMBER;
  C_NUM   NUMBER;
  C_COUNT NUMBER;
BEGIN
  FOR CR_1 IN (SELECT '1' A, 'zhang san' B, '1,2,3,4' C
                 FROM DUAL
               UNION ALL
               SELECT '2' A, 'li si' B, '1' C FROM DUAL) LOOP
    SELECT LENGTH(REPLACE(CR_1.C, ',', ',,')) - LENGTH(CR_1.C) + 1
      INTO C_COUNT
      FROM DUAL;
    FOR I IN 1 .. C_COUNT LOOP
      C_NUM := INSTR(CR_1.C, ',');
      INSERT INTO T_INFO
      VALUES
        (CR_1.A, CR_1.B, decode(SUBSTR(CR_1.C, 1, C_NUM - 1),NULL,cr_1.c,SUBSTR(CR_1.C, 1, C_NUM - 1)));
      CR_1.C := SUBSTR(CR_1.C, C_NUM + 1);
    END LOOP;
  END LOOP;
END;

运行结果
SQL> select * from T_INFO;
 
T_PERSON_ID T_PERSON_NAME        T_TYPE_ID
----------- -------------------- --------------------------------------------------------------------------------
          1 zhang san            1
          1 zhang san            2
          1 zhang san            3
          1 zhang san            4
          2 li si                1
 
SQL> 
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:12:31
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6970/
本文WWW.DOC100.NET DOC100.NET版权所有。