화성시 금곡동 123-3, 123-1, 123-7, 123
경기도 시흥시 정왕동 234-4, 안산시 단원구 성곡동 345-2
위와같은 데이터들을
SELECT a.* , REGEXP_SUBSTR(addr, '[^,]+', 1, lv) v, lv FROM 주소 a , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99) WHERE lv <= LENGTH(addr) - LENGTH(REPLACE(addr, ',')) + 1 ORDER BY addr ;
위쿼리를 이용하여
addr v
화성시 금곡동 123-3, 123-1, 123-7, 123 123-1
화성시 금곡동 123-3, 123-1, 123-7, 123 123
화성시 금곡동 123-3, 123-1, 123-7, 123 123-7
화성시 금곡동 123-3, 123-1, 123-7, 123 화성시 금곡동 123-3
경기도 시흥시 정왕동 234-4, 안산시 단원구 성곡동 345-2 안산시 단원구 성곡동 234-4
경기도 시흥시 정왕동 234-4, 안산시 단원구 성곡동 345-2 경기도 시흥시 정왕동 345-2
로 나눴습니다.
문제가 v컬럼의 데이터들을 전부 경기도 화성시 금곡동 123,경기도 화성시 금곡동 123-7,경기도 화성시 금곡동 123-3,경기도 화성시 금곡동 123-1
이런식으로 표현하고싶은데 방법을 모르겠습니다;;
고수님들의 조언을 부탁드려도 될까요?
WITH addr AS ( SELECT '화성시 금곡동 123-3, 123-1, 123-7, 123' addr FROM dual UNION ALL SELECT '경기도 시흥시 정왕동 234-4, 안산시 단원구 성곡동 345-2' FROM dual UNION ALL SELECT '경기도 시흥시 정왕동 234-7, 안산시 단원구 성곡동 345-3, 345-4' FROM dual UNION ALL SELECT '시흥시 정왕동 567-7, 567-11, 경기도 안산시 단원구 성곡동 456-2' FROM dual ) SELECT addr , lv , LAST_VALUE(SUBSTR(x, 1, y)) IGNORE NULLS OVER(PARTITION BY addr ORDER BY lv) addr1 , SUBSTR(x, y + 1) addr2 FROM (SELECT addr , lv , TRIM(REGEXP_SUBSTR(addr, '[^,]+', 1, lv)) x , REGEXP_INSTR( TRIM(REGEXP_SUBSTR(addr, '[^,]+', 1, lv)) , ' [0-9]') y FROM addr , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9) WHERE lv <= LENGTH(addr) - LENGTH(REPLACE(addr, ',')) + 1 ) ;