Это получит первые 16 столбцов .... но вы можете просто добавить дополнительные столбцы по мере необходимости, следуя той же схеме:
SQL Fiddle
Настройка схемы Oracle 11g R2 :
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 :
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
Результаты :
| 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 :
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
Результаты :
| 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 |