日期:2014-05-17  浏览次数:20841 次

一字段含有逗号分隔的串,把这条记录按逗号分隔分成多条记录,具体如下,在线等
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_COUN