Sql 将字符串oracle拆分为一列并插入到表中

Sql 将字符串oracle拆分为一列并插入到表中,sql,oracle,oracle10g,oracle-sqldeveloper,Sql,Oracle,Oracle10g,Oracle Sqldeveloper,我有一个表格,列数据在下面的formatRow中,只是用来表示行数 Row#1 :test.doc#delimiter#1234,test1.doc#delimiter#1235,test2.doc#delimiter#1236<br> Row#2 :fil1.txt#delimiter#1456,fil1.txt#delimiter#1457 我想使用逗号作为分隔符拆分字符串,在一列中列出所有内容并插入到新表中 输出应类似于此行,以指示行号: Row#1:test.doc#del

我有一个表格,列数据在下面的formatRow中,只是用来表示行数

Row#1 :test.doc#delimiter#1234,test1.doc#delimiter#1235,test2.doc#delimiter#1236<br>
Row#2 :fil1.txt#delimiter#1456,fil1.txt#delimiter#1457
我想使用逗号作为分隔符拆分字符串,在一列中列出所有内容并插入到新表中

输出应类似于此行,以指示行号:

Row#1:test.doc#delimiter#1234<br>
Row#2:test1.doc#delimiter#1235<br>
Row#3:test2.doc#delimiter#1236<br>
Row#4: fil1.txt#delimiter#1456

有人能帮我吗?

如果你想找到一个现有的熟食店并将其拆分

请尝试以下查询:

select  substr(filed_name ,
               REGEXP_SUBSTR(filed_name,'#demilimer#',1),
               (REGEXP_SUBSTR(filed_name,'#demilimer#',2)-1)
    ) col1  ,  

  substr(filed_name ,
               REGEXP_SUBSTR(filed_name,'#demilimer#',2),
               REGEXP_SUBSTR(filed_name,'#demilimer#',3)- (REGEXP_SUBSTR(filed_name,'#demilimer#',2))
    ) col2  ,
     substr(filed_name ,
               REGEXP_SUBSTR(filed_name,'#demilimer#',3),
               length(filed_name)- (REGEXP_SUBSTR(filed_name,'#demilimer#',3))
    ) col3        /* last col should take up to the length  */

from table_name

一种简单的方法是,对于每一行,将字符串拆分为多行,并将其插入到目标表中。在此站点上,有多种方法可以将单个字符串拆分为多行。一个简单的搜索应该会给你一些答案

假设您的表被称为origtable,则包含这些字符串的列被称为mycl,目标表被称为destTable

BEGIN
   FOR orig_row IN (SELECT mycol from origTable) LOOP
      INSERT INTO destTable(outCol)
      SELECT REGEXP_SUBSTR (orig_row.mycol,'(.*?)(,|$)',1,LEVEL,NULL,1)
            FROM dual
      CONNECT BY LEVEL <= REGEXP_COUNT (orig_row.mycol, ',') + 1;
   END LOOP;
END;

是否要查找每个现有分隔符并在此位置拆分?可能重复@Aramillo的OP states:Row以指示行号
WITH data AS (
  SELECT 'test.doc#delimiter#1234,test1.doc#delimiter#1235,test2.doc#delimiter#1236' AS "value" FROM DUAL
  UNION ALL
  SELECT 'fil1.txt#delimiter#1456,fil1.txt#delimiter#1457' AS "value" FROM DUAL
)
SELECT  REGEXP_SUBSTR( data."value", '[^,]+', 1, levels.COLUMN_VALUE )
FROM    data,
        TABLE(
          CAST(
            MULTISET(
              SELECT LEVEL
              FROM   DUAL
              CONNECT BY  LEVEL <= LENGTH( regexp_replace( "value", '[^,]+'))  + 1
            ) AS sys.OdciNumberList
          )
        ) levels;