103-1번지 테크노 주소에서 앞에 숮자와 뒤에 숫자만 구분하여 사용하고 싶은데...
어떻게 구분해야 할지 좀 도와주세요...ㅠㅠ
제가 필요로 합는 값은 103 과 1 이라는 두 값입니다.
103-1번지 아파트
23-10번지 빌라
데이터는 이런식이거든요~
쉽게 할수 있는 방법이 없나요??
------------------------------------------------------
제가 설명을 제대로 못 드렸네요.ㅠ
데이터 중에
24번지 일반주택
이런식에 데이터도 있거든요 -가 없는 데이터도 존재하는데
이럴땐 어떻게 해결할까요 ㅠㅠ
죄송합니다ㅠㅠ
--------------------------------
모두 정성스런 답변 감사드립니다..
질문자의 부족한 점을 너그러이 이해해주세요 .
정말 감사드려요~ 많은 도움 되었습니다.
마농님이 제시하신 유형으로 만들려고
생 쇼를 했네요..
그냥 재미삼아 보세요..
WITH T AS (SELECT '103-1번지 테크노11A' TEXT FROM DUAL UNION ALL SELECT '상가 12-3 번지 빌라 4차' TEXT FROM DUAL UNION ALL SELECT '상가 23-10번지 빌라 2차' TEXT FROM DUAL UNION ALL SELECT '상가 258번지 빌라1 1차' TEXT FROM DUAL UNION ALL SELECT '230번지 빌라2' TEXT FROM DUAL UNION ALL SELECT '아트 123 빌라3' TEXT FROM DUAL ) SELECT TEXT , CASE WHEN TEXT1 = '-' THEN REGEXP_SUBSTR (BUNGI, '[^-]+', 1, 1) WHEN TEXT1 != '-' AND TEXT2 IS NULL THEN REGEXP_SUBSTR(TEXT, '[^'||TEXT1||']+', 1, 1) WHEN TEXT1 != '-' AND TEXT2 = '-' THEN REGEXP_SUBSTR (BUNGI, '[^-]+', 1, 1) WHEN TEXT1 != '-' AND TEXT2 IS NOT NULL THEN REGEXP_REPLACE(REGEXP_SUBSTR(TEXT, '[^'||TEXT1||']+', 1, 1), '[^0-9]') ELSE NULL END AS FNO1 , CASE WHEN TEXT1 != '-' AND TEXT2 = '-' THEN REGEXP_REPLACE(REGEXP_SUBSTR(REGEXP_SUBSTR(TEXT, '[^'||NVL(TEXT1,'-')||']+', 1, 1), '[^-]+', 1, 2), '[^0-9]') ELSE REGEXP_SUBSTR(REGEXP_SUBSTR(TEXT, '[^'||NVL(TEXT2,'-')||']+', 1, 1), '[^-]+', 1, 2) END AS LNO1 FROM( SELECT REGEXP_REPLACE(TEXT, '[^0-9,-]') BUNGI , REGEXP_SUBSTR (TEXT, '[^0-9]+', 1, 1) TEXT1 , REGEXP_SUBSTR (TEXT, '[^0-9]+', 1, 2) TEXT2 ,TEXT FROM T ) ;
-- regexp_substr(text,'[[:digit:]-]+') 은 regexp_substr(text,'[0-9-]+',1,1) 같은 표현입니다. -- text에서 첫번째 나오는 숫자나 '-', 혹은 숫자와 '-'조합으로 된 부분을 substr하라는 말입니다. -- 그리고 여담이지만 오라클초보님께서 위에서 사용하신 -- REGEXP_REPLACE(text, '[^0-9,-]') 에서 ','를 or 형태로 사용하신것인지 -- or 문법은 '|'이고 여기에서는 or 조건 없이 그냥 나열해주시면 됩니다. -- 따라서 여기서 명령은 숫자,',','-' 이외는 다 삭제하라는 말이되므로 ','은 굳이 필요는 없어보이네요