컬럼내 데이터분리 0 2 2,033

by abysseye [SQL Query] substr instr [2019.04.23 18:17:44]


주소
서울특별시 중랑구 봉화산로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을 사용해서 작성해야 할까요?

맘은 급하고 머리속에선  맴돌기만 하고 결과값이 잘 안나와서 초보적인 질문이지만 문의해봅니다.

by 마농 [2019.04.23 20:52:13]

글쎄요?
주소가 저렇게 예쁘게 들어 있을런지? 걱정되는데요.
수많은 예외가 있지 않을까? 생각되네요.
도로명주소가 아닌 구주소가 있다던가?
공백의 개수가 다르다던가? 등등등
가능한 모든 케이스를 검토해야 하지 않을까? 생각되네요.
일단 위 예처럼 거의 고정으로 예쁘게 들어온다고 가정하면
 

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
        )
;

 


by abysseye [2019.04.24 08:28:30]

감사합니다.

안그래도 데이터들을 보니...90%이상이 예쁘게 들어왔더라구요..

중간에 ','가 들어있기는 하지만 영향을 줄정도는 아닌거 같아요

알려주신대로 적용해볼게요~ 제가 너무 한번에 하려고 했네요^^

친절한  답변 감사드립니다~~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입