sql - Split a column into two or more in Oracle -


lets table looks :

------------------------- | id | prop             | ------------------------- | 1  | jhon_dhoe_21     | ------------------------- | 2  | tom_dohn_23_male | ------------------------- | 3  | scot             | ------------------------- 

the properties devided "_". after select table should this:

-------------------------------------- | id | prop1 | prop2 | prop3 | prop4 | -------------------------------------- | 1  |  jhon | dhoe  |  21   |  null | -------------------------------------- | 2  |  tom  | dohn  |  23   |  male | -------------------------------------- | 3  |  scot | null  | null  |  null | -------------------------------------- 

now if know maximum number of properties (n) have suppose can create n number of regex expresions on prop column or something. if not know maybe have first find row properties ?

edit:

i can't accept multiple rows.

it interesting question, i've solved way:

with   tbl (     select 1 id, 'jhon_dhoe_21' prop dual union     select 2 id, 'tom_dohn_23_male' prop dual union     select 3 id, 'scot' prop dual   ),   maxrows (select level rn dual connect level <= 100) select id, regexp_substr(t.prop, '[^_]+', 1, mr.rn) prop_rn, rn, prop tbl t, maxrows mr mr.rn <= regexp_count(t.prop, '\_') + 1 order id, rn 

results:

        id prop_rn                  rn prop ---------- ---------------- ---------- ----------------          1 jhon                      1 jhon_dhoe_21          1 dhoe                      2 jhon_dhoe_21          1 21                        3 jhon_dhoe_21          2 tom                       1 tom_dohn_23_male          2 dohn                      2 tom_dohn_23_male          2 23                        3 tom_dohn_23_male          2 male                      4 tom_dohn_23_male          3 scot                      1 scot  8 rows selected 

if know (or sure) of maximum possible columns, can use:

with   tbl (     select 1 id, 'jhon_dhoe_21' prop dual union     select 2 id, 'tom_dohn_23_male' prop dual union     select 3 id, 'scot' prop dual   ),   maxrows (select level rn dual connect level <= 100),   tbl2 (     select id, regexp_substr(t.prop, '[^_]+', 1, mr.rn) prop_rn, rn, prop     tbl t, maxrows mr     mr.rn <= regexp_count(t.prop, '\_') + 1     order id, rn) select * tbl2 pivot (   max(prop_rn)   rn in (1,2,3,4,6,7,8,9,10) ) 

result:

        id prop             1                2                3                4                6                7                8                9                10 ---------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ----------------          1 jhon_dhoe_21     jhon             dhoe             21                                                                                                              3 scot             scot                                                                                                                                              2 tom_dohn_23_male tom              dohn             23               male                                                                                   sql>  

or use xmltype:

with   tbl (     select 1 id, 'jhon_dhoe_21' prop dual union     select 2 id, 'tom_dohn_23_male' prop dual union     select 3 id, 'scot' prop dual   ),   maxrows (select level rn dual connect level <= 100),   tbl2 (     select id, regexp_substr(t.prop, '[^_]+', 1, mr.rn) prop_rn, rn, prop     tbl t, maxrows mr     mr.rn <= regexp_count(t.prop, '\_') + 1     order id, rn) select * tbl2 pivot xml (   max(prop_rn) prp   rn in (any) ) 

Comments

Popular posts from this blog

magento2 - Magento 2 admin grid add filter to collection -

Android volley - avoid multiple requests of the same kind to the server? -

Combining PHP Registration and Login into one class with multiple functions in one PHP file -