안녕하세요. 새해가 밝았네요.
안좋았던 작년 일들은 잊어버리고 새해엔 새출발 새뜻으로 원하시는일 이루시기 바랍니다.
그런 의미로다가.. 쿼리 한문제 내겠습니다 ㅡ.ㅡ
<원본데이터>
DT |
PACKET |
20110101050000 |
[0]02[1]00[2]00[3]04[4]02[5]00[6]00[7]04...[25]26[26]01[27]02[28]07[29]00[30]01 |
20110101051051 |
[0]02[1]00[2]00[3]04[4]02[5]00[6]00[7]04...[36]00[37]00[38]00[39]00 |
20110101052051 |
[0]02[1]00[2]00[3]04[4]02[5]00[6]00[7]04...[33]01[34]72[35]85[36]00[37]00 |
20110101053050 |
[0]02[1]00[2]00[3]04[4]02[5]00[6]00[7]04...[36]00[37]00[38]00[39]00 |
20110101054050 |
[0]02[1]00[2]00[3]04[4]02[5]00[6]00[7]04...[36]00[37]00[38]00[39]00 |
20110101055050 |
[0]02[1]00[2]00[3]04[4]02[5]00[6]00[7]04...[20]81[21]00[22]02[23]64[24]04 |
샘플데이터는 파일로 첨부했습니다.
<결과데이터>
DT |
PACKET |
20110101050000 |
[0]02 |
20110101050000 |
[1]00 |
20110101050000 |
[2]00 |
20110101050000 |
[3]04 |
…. |
…. |
20110101050000 |
[29]00 |
20110101050000 |
[30]01 |
20110101051051 |
[0]02 |
20110101051051 |
[1]00 |
20110101051051 |
[2]00 |
…. |
…. |
20110101051051 |
[39]00 |
20110101052051 |
[0]02 |
20110101052051 |
[1]00 |
….. |
…. |
20110101055050 |
[24]04 |
패킷데이터를 순서대로 잘라서 위 결과데이터와 같이 나열하시면 됩니다.
※ 샘플데이터가 충분하지 못한것 같습니다.. '[' 기준으로 자르는게 아니라 '[숫자]' 기준으로 자르는겁니다.
샘플데이터엔 없지만 '[1]00[200' 데이터가 있을경우 [1]00. [200 로 나오는게 아니라 [1]00[200으로 나타내야 합니다.
>> 자답
select
dt,
regexp_substr(a.packet,'[^ ]+',1,b.lv) packet
from (
select
dt,
regexp_replace(packet,'(\[[[:digit:]]{1,}\])',' \1') packet,
regexp_count(packet,'(\[[[:digit:]]{1,}\])') cnt
from test
) a inner join (select level lv
from (select max(regexp_count(packet,'(\[[[:digit:]]{1,}\])')) max_cnt from test)
connect by level <= max_cnt) b
on b.lv <= a.cnt
order by a.dt,b.lv