혹시 주소가 하나로 들어가 있는 데이타를 두개로 나눌수 있는 방법이 있을까요? 0 5 513

by lgxj [2022.02.17 10:30:07]


저희가 우선 기본적으로 한개의 컬럼에 들어가 있는 값을 나누는걸 함수로 만들어서 사용하는데 가끔식 나눠지지 않는 주소들이 있더라고요

기본적으로 다 잘되는데 이런케이스는 잘안되서 혹시 사용하시는 sql이 있ㅇ실까요?

WITH m_data
AS
(
    SELECT '전라북도 전주시 완산구 홍산북로 21-7(효자2가 1230-8) 스타빌딩 4층  ㈜팜한농' AS addr FROM dual
    UNION ALL
    SELECT '광주광역시 광산구 임방울대로 826번길 20 수연빌딩 3층  ㈜팜한농' AS addr FROM dual
    UNION ALL
    SELECT '전남 무안군 삼향면 대죽동로 46 대호빌딩 4층  ㈜팜한농' AS addr FROM dual    
    UNION ALL
    SELECT '전북 전주시 완산구 효자동3가 1613-1 로뎀하우스 401호' AS addr FROM dual        
)
SELECT
    substr(
    addr,1,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')
    +1),' ')) ||

    decode(
    substr(addr,
    length(substr(
    addr,1,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')
    +1),' ')))-1,1
    ), '구',
    substr(
    substr(
    addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+1),' ')
    +1)
    ,1,instr(substr(
    addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+1),' ')
    +1)
    ,' '))
    ) as ADDRESS1,

    substr(
    substr(
    addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+1),' ')
    +1)
    ,
    nvl(
    length(decode(
    substr(addr,
    length(substr(
    addr,1,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')
    +1),' ')))-1,1
    ), '구',
    substr(
    substr(
    addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+1),' ')
    +1)
    ,1,instr(substr(
    addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+instr(
    substr(addr,instr(addr,' ')+instr(substr(addr,instr(addr,' ')+1),' ')+1),' ')
    +1)
    ,' '))
    )
    ),0)+1
    ) as ADDRESS2
    FROM m_data

by 동동동 [2022.02.17 12:44:20]

결과가 어떻게 나와야 하는건가요?


by lgxj [2022.02.17 13:55:28]

예를 들면

addr1 : 전라북도 전주시 완산구 홍산북로 21-7(효자2가 1230-8)

addr2 : 스타빌딩 4층  ㈜팜한농

 

이런식으로 주소1/2가 나눠줘야 됩니다.


by 동동동 [2022.02.17 14:30:42]

주소를 우정사업부에서 제공하는 코드화된 데이터를 등록하고 뒤에 주소만 따로 입력받는 방법이 아니면..

뭔가 규칙이 없으면 어려워 보이네요...

addr2 : 뒤에서 부터 공백 3자리 까지.

addr1 : 앞에서 부터 addr2를 제외한것 까지....

 


by 동동동 [2022.02.17 16:08:04]
WITH m_data
AS
(
    SELECT '전라북도 전주시 완산구 홍산북로 21-7(효자2가 1230-8) 스타빌딩 4층  ㈜팜한농' AS addr FROM dual
    UNION ALL
    SELECT '광주광역시 광산구 임방울대로 826번길 20 수연빌딩 3층  ㈜팜한농' AS addr FROM dual
    UNION ALL
    SELECT '전남 무안군 삼향면 대죽동로 46 대호빌딩 4층  ㈜팜한농' AS addr FROM dual    
    UNION ALL
    SELECT '전북 전주시 완산구 효자동3가 1613-1 로뎀하우스 401호' AS addr FROM dual
    UNION ALL
    SELECT '전북 전주시 완산구 효자동3가 1613-1   로뎀하우스 401호' AS addr FROM dual
)
SELECT ADDR
     , TRIM(SUBSTR(ADDR, 1, REGEXP_INSTR(ADDR, '[^ ]+', 1, REGEXP_COUNT(ADDR,' ')+2-4) -1)) ADDR1
     , (REGEXP_SUBSTR(ADDR, '[^ ]+', 1, REGEXP_COUNT(ADDR,' ')+2-4)
      || ' ' || REGEXP_SUBSTR(ADDR, '[^ ]+', 1, REGEXP_COUNT(ADDR,' ')+2-3)
      || ' ' || REGEXP_SUBSTR(ADDR, '[^ ]+', 1, REGEXP_COUNT(ADDR,' ')+2-2)
      || ' ' || REGEXP_SUBSTR(ADDR, '[^ ]+', 1, REGEXP_COUNT(ADDR,' ')+2-1)) ADDR2
  FROM M_DATA A;

공백이 기준이라면 데이터도 명확하게 공백이 있어야 겠네요..

 


by lgxj [2022.02.17 16:15:22]

이게 모든 케이스를 다 생각하고 만들어야되는 상황인데..힘드네요...

일단 감사합니다.

확인해보겠습니다.

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