2016-06-22 2 views
0

Я собираюсь различать значения и делать их столбцами через столбцы строк. мой формат строки выглядит так:Создание столбцов из строки в оракуле

|| 1 | 21 | -1 | -1 | -1 | 0 ||||

Я уже пытался использовать instr или regexp_instr, но, как и в некоторых строках, первый символ имеет значение null, он возвращает неверные данные. Здесь разделитель равен '|' ,

enter image description here

Это понятно, если вы могли бы мне помочь в этом вопросе.

+0

кто-нибудь может помочь? – arash

ответ

1

Запрос:

WITH sample_data ("COMMENT") AS (
    SELECT '||1|21|-1|-1|-1|0||||' FROM DUAL 
) 
SELECT REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 1, NULL, 1) AS col1, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 2, NULL, 1) AS col2, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 3, NULL, 1) AS col3, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 4, NULL, 1) AS col4, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 5, NULL, 1) AS col5, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 6, NULL, 1) AS col6, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 7, NULL, 1) AS col7, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 8, NULL, 1) AS col8, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 9, NULL, 1) AS col9, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 10, NULL, 1) AS col10, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 11, NULL, 1) AS col11, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 12, NULL, 1) AS col12 
FROM sample_data; 

Выход:

COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9 COL10 COL11 COL12 
---- ---- ---- ---- ---- ---- ---- ---- ---- ----- ----- ----- 
      1 21 -1 -1 -1 0 
+0

большое спасибо и признательность, это работает. Наилучшим образом приветствуется – arash

+0

Кто-нибудь может мне помочь? – arash