我有以下字符串(它在列中的一个字符串) -
<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行或多行,但不固定
答案 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.