首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将分隔符数据转换为行和列

将分隔符数据转换为行和列
EN

Stack Overflow用户
提问于 2018-05-18 06:35:43
回答 1查看 83关注 0票数 0

我在结果列中有原始数据,如下面用分号分隔。

案例ID;HPMN;VPMN;IMSI;案例创建时间;案例报告时间;案例结束时间;最后调用时间;欺诈类型;报告注释;特别提款权值-创建(TAP);特别提款权值-创建(特别提款权);特别提款权值-报告(TAP);特别提款权值-报告(NRT);特别提款权值-关闭(TAP);特别提款权值-总计(TAP);SDR值-欺诈损失(TAP);SDR值- Fraud损失(NRT);案例状态ID;案例状态;分析师指定的名称-关闭;Group;Flag;7014472;NLXLT;ESPAT;204046205787443;17.05.2018 00:00;17.05.2018 05:57;;18.05.2018 :45:09;高使用率请求;10.35;0;10.35;0;0;0;20.72;0;10.37;0;512;Pending;Gloriana;Lokesh;AllRoamingGroup P1;non-hosted;7014473;OMNNT;ARETC;422030204010256;17.05.2018 00:01;17.05.2018 :57;15.05.2018 19:47:09;OMNNT 10 P1和50特别提款权;;51.35;0;51.35;0;0;51.35 ;0;0;0;512;Pending;Gloriana;Jordan;AllRoamingGroup P1;non-hosted;7014474;NLXLT;CZECM;204046868687429;17.05.2018 00:02;;17.05.2018 00:24;17.05.2018 15:36:23;呼叫第三国;0;0;0;0;0;.44;0;2048;封闭而非欺诈;Gloriana;Gloriana;AllRoamingGroup P1;非托管;7014475;370021204427525;17.05.2018 00:03;17.05.2018 00:26;17.05.2018 22:44:19;呼叫第三次country;;0;230.41;0;0;0;230.41;1.94;1200.07;1.94;969.66;2048;Closed Not Fraud;Gloriana;Gloriana;AllRoamingGroup P1;非托管

但我需要这样的输出

我尝试了正则表达式,但无法获得所需的输出。

EN

回答 1

Stack Overflow用户

发布于 2018-05-18 08:36:46

这将得到前16栏..。但是,您可以按照相同的模式根据需要添加额外的列:

SQL Fiddle

Oracle 11g R2架构设置

代码语言:javascript
复制
CREATE TABLE table_name ( value ) AS
SELECT 'Case ID;HPMN;VPMN;IMSI;Case Creation Time;Case Reporting Time;Case Closure Time;Last Call Time;Fraud Type;Reporting Remarks;SDR Value - Created (TAP);SDR Value - Created (NRT);SDR Value - Reported (TAP);SDR Value - Reported (NRT);SDR Value - Closed (TAP);SDR Value - Closed (NRT);SDR Value - Total (TAP);SDR Value - Total (NRT);SDR Value - Fraud Loss (TAP);SDR Value - Fraud Loss (NRT);Case Status ID;Case Status;Analyst Name - Assigned;Analyst Name - Closure;Group;Flag;7014472;NLXLT;ESPAT;204046205787443;17.05.2018 00:00;17.05.2018 05:57;;18.05.2018 06:45:09;High Usage Request ;;10.35;0; 10.35;0;0;0;20.72;0;10.37;0;512;Pending;Gloriana;Lokesh;AllRoamingGroup P1;non-hosted;7014473;OMNNT;ARETC;422030204010256;17.05.2018 00:01;17.05.2018 05:57;;15.05.2018 19:47:09;OMNNT 10MB & 50 SDRs;;51.35 ;0;51.35;0;0;0;51.35 ;0;0;0;512;Pending;Gloriana;Jordan;AllRoamingGroup P1;non-hosted;7014474;NLXLT;CZECM;204046868687429;17.05.2018 00:02;;17.05.2018 00:24;17.05.2018 15:36:23;Call third country;;0;0;0;0;0;0;.44;0;.44;0;2048;Closed Not Fraud;Gloriana;Gloriana;AllRoamingGroup P1;non-hosted; 7014475;DOMCL;PRICL;370021204427525;17.05.2018 00:03;;17.05.2018 00:26;17.05.2018 22:44:19;Call third country;;0;230.41;0;0;0;230.41;1.94;1200.07;1.94;969.66;2048;Closed Not Fraud;Gloriana;Gloriana;AllRoamingGroup P1;non-hosted;' FROM DUAL;

查询1

代码语言:javascript
复制
WITH data (
  value,
  lvl,
  maxlvl,
  Case_ID,
  HPMN,
  VPMN,
  IMSI,
  Case_Creation_Time,
  Case_Reporting_Time,
  Case_Closure_Time,
  Last_Call_Time,
  Fraud_Type,
  Reporting_Remarks,
  SDR_Value_Created_TAP,
  SDR_Value_Created_NRT,
  SDR_Value_Reported_TAP,
  SDR_Value_Reported_NRT,
  SDR_Value_Closed_TAP,
  SDR_Value_Closed_NRT
) AS (
  SELECT value,
         1,
         REGEXP_COUNT( value, '([^;]*);' ) / 26,
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  1, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  2, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  3, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  4, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  5, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  6, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  7, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  8, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 +  9, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 + 10, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 + 11, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 + 12, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 + 13, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 + 14, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 + 15, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1,   0*26 + 16, NULL, 1 )
  FROM   table_name
UNION ALL
  SELECT value,
         lvl+1,
         maxlvl,
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  1, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  2, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  3, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  4, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  5, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  6, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  7, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  8, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 +  9, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 + 10, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 + 11, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 + 12, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 + 13, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 + 14, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 + 15, NULL, 1 ),
         REGEXP_SUBSTR( value, '([^;]*);', 1, lvl*26 + 16, NULL, 1 )
  FROM   data
  WHERE  lvl < maxlvl
)
SELECT Case_ID,
       HPMN,
       VPMN,
       IMSI,
       Case_Creation_Time,
       Case_Reporting_Time,
       Case_Closure_Time,
       Last_Call_Time,
       Fraud_Type,
       Reporting_Remarks,
       SDR_Value_Created_TAP,
       SDR_Value_Created_NRT,
       SDR_Value_Reported_TAP,
       SDR_Value_Reported_NRT,
       SDR_Value_Closed_TAP,
       SDR_Value_Closed_NRT
FROM   data
WHERE  lvl > 1

结果

代码语言:javascript
复制
|  CASE_ID |  HPMN |  VPMN |            IMSI | CASE_CREATION_TIME | CASE_REPORTING_TIME | CASE_CLOSURE_TIME |      LAST_CALL_TIME |           FRAUD_TYPE | REPORTING_REMARKS | SDR_VALUE_CREATED_TAP | SDR_VALUE_CREATED_NRT | SDR_VALUE_REPORTED_TAP | SDR_VALUE_REPORTED_NRT | SDR_VALUE_CLOSED_TAP | SDR_VALUE_CLOSED_NRT |
|----------|-------|-------|-----------------|--------------------|---------------------|-------------------|---------------------|----------------------|-------------------|-----------------------|-----------------------|------------------------|------------------------|----------------------|----------------------|
|  7014472 | NLXLT | ESPAT | 204046205787443 |   17.05.2018 00:00 |    17.05.2018 05:57 |            (null) | 18.05.2018 06:45:09 |  High Usage Request  |            (null) |                 10.35 |                     0 |                  10.35 |                      0 |                    0 |                    0 |
|  7014473 | OMNNT | ARETC | 422030204010256 |   17.05.2018 00:01 |    17.05.2018 05:57 |            (null) | 15.05.2018 19:47:09 | OMNNT 10MB & 50 SDRs |            (null) |                51.35  |                     0 |                  51.35 |                      0 |                    0 |                    0 |
|  7014474 | NLXLT | CZECM | 204046868687429 |   17.05.2018 00:02 |              (null) |  17.05.2018 00:24 | 17.05.2018 15:36:23 |   Call third country |            (null) |                     0 |                     0 |                      0 |                      0 |                    0 |                    0 |
|  7014475 | DOMCL | PRICL | 370021204427525 |   17.05.2018 00:03 |              (null) |  17.05.2018 00:26 | 17.05.2018 22:44:19 |   Call third country |            (null) |                     0 |                230.41 |                      0 |                      0 |                    0 |               230.41 |

查询2

代码语言:javascript
复制
SELECT RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  1 ), ';' ) AS Case_ID,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  2 ), ';' ) AS HPMN,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  3 ), ';' ) AS VPMN,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  4 ), ';' ) AS IMSI,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  5 ), ';' ) AS Case_Creation_Time,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  6 ), ';' ) AS Case_Reporting_Time,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  7 ), ';' ) AS Case_Closure_Time,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  8 ), ';' ) AS Last_Call_Time,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 +  9 ), ';' ) AS Fraud_Type,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 + 10 ), ';' ) AS Reporting_Remarks,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 + 11 ), ';' ) AS SDR_Value_Created_TAP,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 + 12 ), ';' ) AS SDR_Value_Created_NRT,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 + 13 ), ';' ) AS SDR_Value_Reported_TAP,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 + 14 ), ';' ) AS SDR_Value_Reported_NRT,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 + 15 ), ';' ) AS SDR_Value_Closed_TAP,
       RTRIM( REGEXP_SUBSTR( value, '.*?;', 1, l.COLUMN_VALUE*26 + 16 ), ';' ) AS SDR_Value_Closed_NRT
FROM   table_name t
       CROSS JOIN
       TABLE(
         CAST(
           MULTISET(
             SELECT LEVEL
             FROM   DUAL
             CONNECT BY REGEXP_SUBSTR( t.value, '.*?;', 1, LEVEL*26 + 1 ) IS NOT NULL
           )
           AS SYS.ODCINUMBERLIST
         )
       ) l

结果

代码语言:javascript
复制
|  CASE_ID |  HPMN |  VPMN |            IMSI | CASE_CREATION_TIME | CASE_REPORTING_TIME | CASE_CLOSURE_TIME |      LAST_CALL_TIME |           FRAUD_TYPE | REPORTING_REMARKS | SDR_VALUE_CREATED_TAP | SDR_VALUE_CREATED_NRT | SDR_VALUE_REPORTED_TAP | SDR_VALUE_REPORTED_NRT | SDR_VALUE_CLOSED_TAP | SDR_VALUE_CLOSED_NRT |
|----------|-------|-------|-----------------|--------------------|---------------------|-------------------|---------------------|----------------------|-------------------|-----------------------|-----------------------|------------------------|------------------------|----------------------|----------------------|
|  7014472 | NLXLT | ESPAT | 204046205787443 |   17.05.2018 00:00 |    17.05.2018 05:57 |            (null) | 18.05.2018 06:45:09 |  High Usage Request  |            (null) |                 10.35 |                     0 |                  10.35 |                      0 |                    0 |                    0 |
|  7014473 | OMNNT | ARETC | 422030204010256 |   17.05.2018 00:01 |    17.05.2018 05:57 |            (null) | 15.05.2018 19:47:09 | OMNNT 10MB & 50 SDRs |            (null) |                51.35  |                     0 |                  51.35 |                      0 |                    0 |                    0 |
|  7014474 | NLXLT | CZECM | 204046868687429 |   17.05.2018 00:02 |              (null) |  17.05.2018 00:24 | 17.05.2018 15:36:23 |   Call third country |            (null) |                     0 |                     0 |                      0 |                      0 |                    0 |                    0 |
|  7014475 | DOMCL | PRICL | 370021204427525 |   17.05.2018 00:03 |              (null) |  17.05.2018 00:26 | 17.05.2018 22:44:19 |   Call third country |            (null) |                     0 |                230.41 |                      0 |                      0 |                    0 |               230.41 |
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50405163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档