주소 |
서울특별시 중랑구 봉화산로56길 99-15 |
서울특별시 성동구 광화루로 310 |
결과
시도 | 시군구 | 도로명 | 본번 | 부번 |
서울특별시 | 중랑구 | 봉화산로56길 | 99 | 15 |
서울특별시 | 성동구 | 광화루로 | 310 |
하나의 통으로 되어 있는 주소를 위의 결과처럼 만들려고 하는데요
스페이스 값을 기준으로 나눠보려고 하는데요
select
substr(주소,1, instr(주소,' ') as 시도,
substr(주소,instr(주소,' ' ,1,1)+1,instr(주소,' ')-3) as 시군구,
substr(주소,instr(주소,' ' ,1,2)+1,instr(주소,' ',1,3)) as 도로명
from (select '서울특별시 중랑구 봉화산로56길 99-15' as 주소 from dual
union all
select '서울특별시 성동구 광화루로 310' as 주소)
"서울특별시 중랑구 봉화산로56길 99-15"의 주소는
서울특별시 | 중랑구 | 봉화산로56길 | 99 | 15 |
" 서울특별시 성동구 광화루로 310" 는 아래처럼 나오네요..
서울특별시 | 성동구 | 광화루로 31 |
로 나옵니다..
regexp_instr이나 regexp_substr을 사용해서 작성해야 할까요?
맘은 급하고 머리속에선 맴돌기만 하고 결과값이 잘 안나와서 초보적인 질문이지만 문의해봅니다.
글쎄요?
주소가 저렇게 예쁘게 들어 있을런지? 걱정되는데요.
수많은 예외가 있지 않을까? 생각되네요.
도로명주소가 아닌 구주소가 있다던가?
공백의 개수가 다르다던가? 등등등
가능한 모든 케이스를 검토해야 하지 않을까? 생각되네요.
일단 위 예처럼 거의 고정으로 예쁘게 들어온다고 가정하면
WITH t AS ( SELECT '서울특별시 중랑구 봉화산로56길 99-15' addr FROM dual UNION ALL SELECT '서울특별시 성동구 광화루로 310' FROM dual ) SELECT addr , SUBSTR(addr, 1, p1 - 1) addr1 , SUBSTR(addr, p1 + 1, p2 - p1 - 1) addr2 , SUBSTR(addr, p2 + 1, p3 - p2 - 1) addr3 , SUBSTR(addr, p3 + 1, p4 - p3 - 1) addr4 , SUBSTR(addr, p4 + 1 ) addr5 FROM (SELECT addr , INSTR(addr, ' ', 1, 1) p1 , INSTR(addr, ' ', 1, 2) p2 , INSTR(addr, ' ', 1, 3) p3 , INSTR(addr||'-', '-') p4 FROM t ) ;