【问题标题】:Split string oracle into a single column and insert into a table将字符串 oracle 拆分为单列并插入到表中
【发布时间】:2015-04-16 18:47:04
【问题描述】:

我有一个表格,其中包含以下格式的列数据(行号仅表示行号)。

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# 只是表示行号):

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

谁能帮我做这个?

【问题讨论】:

标签: sql oracle oracle10g oracle-sqldeveloper


【解决方案1】:
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;

【讨论】:

  • @Aramillo OP 声明:(Row# just to indicate row number)
【解决方案2】:

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

假设您的表称为 origtable,则包含这些字符串的列称为 mycol,目标表称为 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;

【讨论】:

    【解决方案3】:

    如果你想找到一个现有的分隔符并拆分它

    试试这个查询:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2014-11-27
      • 1970-01-01
      相关资源
      最近更新 更多