我如何在Oracle中将字符串拆分为列和行?

时间:2016-02-11 07:18:05

标签: sql regex oracle

我有以下字符串(它在列中的一个字符串) -

<09/27/2014 15:04:35:Registered:No update
<09/27/14 15:55:45:Work Completed:No update>
<09/29/2014 12:42:02:Informed:No update>>
<09/30/2014 11:18:40:Acknowledge:No update>>>
<09/30/2014 11:18:56:Travel Start:No update>>>>
<09/30/2014 11:19:06:Travel End:No update>>>>>
<09/30/2014 11:19:18:Work Commenced:No update>>>>>>
<09/30/2014 11:19:29:Fault Rectified:No update>>>>>>>
<09/30/2014 11:19:40:Work Completed:done>

我想将以下字符串显示为多个列,其中单独的行为 -

Date                  Status          Description
09/27/2014 15:04:35   Registered      No update
09/27/2014 15:55:45   Work Completed  No update

依旧......

如何使用regexp for&lt;,&gt;,space和冒号将单个列拆分为多个列和行。

修改 -

    <09/27/2014 15:04:35:Registered:No update
    <09/27/14 15:55:45:Work Completed:No update>
    <09/29/2014 12:42:02:Informed:No update>>

上面的字符串可以有1行或2行或多行,但不固定

1 个答案:

答案 0 :(得分:1)

由于它是一行,您需要先使用换行符作为分隔符split the string into multiple rows

然后,您可以使用简单的 SUBSTR INSTR 来实现。

例如,

SQL> WITH sample_data AS(
  2  SELECT '<09/27/2014 15:04:35:Registered:No update
  3  <09/27/2014 15:55:45:WORK Completed:No update>
  4  <09/29/2014 12:42:02:Informed:No update>>
  5  <09/30/2014 11:18:40:Acknowledge:No update>>>
  6  <09/30/2014 11:18:56:Travel Start:No update>>>>
  7  <09/30/2014 11:19:06:Travel END:No update>>>>>
  8  <09/30/2014 11:19:18:Work Commenced:No update>>>>>>
  9  <09/30/2014 11:19:29:Fault Rectified:No update>>>>>>>
 10  <09/30/2014 11:19:40:Work Completed:done>' str FROM dual
 11  )
 12  -- end of sample_data mimicking real table
 13  SELECT substr(str, 2, instr(str, ':', 1, 3) -2) col1,
 14         substr(str, instr(str, ':', 1, 3) +1, instr(str, ':', 1, 4)
 15            - instr(str, ':', 1, 3) -1) col2,
 16         REPLACE(substr(str, instr(str, ':', 1, 4) +1), '>', '') col3
 17  FROM(
 18       SELECT trim(regexp_substr(str, '[^
 19  ]+', 1, LEVEL)) str
 20       FROM sample_data
 21       CONNECT BY LEVEL <= regexp_count(str, chr(10))+1 );

COL1                 COL2            COL3
-------------------- --------------- ----------
09/27/2014 15:04:35  Registered      No update
09/27/2014 15:55:45  WORK Completed  No update
09/29/2014 12:42:02  Informed        No update
09/30/2014 11:18:40  Acknowledge     No update
09/30/2014 11:18:56  Travel Start    No update
09/30/2014 11:19:06  Travel END      No update
09/30/2014 11:19:18  Work Commenced  No update
09/30/2014 11:19:29  Fault Rectified No update
09/30/2014 11:19:40  Work Completed  done

9 rows selected.