문자열을 좀 구분하고 싶은데 초보인저는 쉽지가 않네요.ㅠㅠ 2 10 830

by 워너B마스터DB [2015.03.04 15:50:20]


103-1번지 테크노   주소에서 앞에 숮자와 뒤에 숫자만  구분하여 사용하고 싶은데...

어떻게 구분해야 할지 좀 도와주세요...ㅠㅠ

제가 필요로 합는 값은  103  과  1 이라는 두 값입니다. 

 

 

103-1번지 아파트 

23-10번지 빌라 

데이터는 이런식이거든요~ 

쉽게 할수 있는 방법이 없나요??

------------------------------------------------------

제가 설명을 제대로 못 드렸네요.ㅠ

데이터 중에 

24번지 일반주택 

이런식에 데이터도 있거든요  -가 없는 데이터도 존재하는데 

이럴땐 어떻게 해결할까요 ㅠㅠ

죄송합니다ㅠㅠ

--------------------------------

모두 정성스런 답변 감사드립니다..

질문자의 부족한 점을 너그러이 이해해주세요 .

정말 감사드려요~ 많은 도움 되었습니다.

 

 

 

by 낭만캐치 [2015.03.04 16:26:55]
--정규식을 이용해 문자열에서 숫자만 빼옵니다,
--그런데 jkson님의 답변이 질문에 의도가 맞는거 같아요^^; 
SELECT *
FROM(
        SELECT REGEXP_REPLACE('103-1번지 아파트', '[^0-9]') from dual union all
        SELECT REGEXP_REPLACE('23-10번지 빌라', '[^0-9]') from dual
) T1

 


by jkson [2015.03.04 16:27:47]

WITH t AS
     (SELECT '103-1번지 테크노' text FROM DUAL
      UNION ALL
      SELECT '23-10번지 빌라' text FROM DUAL
     )
SELECT REGEXP_SUBSTR (bungi, '[^-]+', 1, 1) fno, REGEXP_SUBSTR (bungi, '[^-]+', 1, 2) lno
  FROM (SELECT REGEXP_SUBSTR (text, '[0-9]+-[0-9]+') bungi
          FROM t)

우앙 간발의 차로 두분이나 댓글을 달아주셨네용ㅋ


by 개발뉴비 [2015.03.04 16:38:24]

WITH T AS
(
    SELECT '103-1번지 테크노' 주소 FROM DUAL UNION ALL
    SELECT '23-10번지 빌라' FROM DUAL
)
SELECT 번지1
     , SUBSTR(번지2, 1, INSTR(번지2, '번지')-1) 번지2
FROM
(
    SELECT  SUBSTR(주소,1,(INSTR(주소, '-')-1)) 번지1
          , SUBSTR(주소,(INSTR(주소, '-')+1)) 번지2
    FROM T
);

정규식을 이용하는 방법이 있었네요.

왜 생각을 못했을까..........ㅠ


by 마농 [2015.03.04 17:08:08]

예시자료의 유형이 좀더 다양하지 않을런지요?
'000-00번지 XXXXX' 한가지 유형만 있나요?
'000번지 XXXXX' - 가 없는 유형도 있을 듯 하구요
'000번지 XXXX3차' 번지 외 다른 부분에 숫자가 들어가는 유형
'000-00 XXXXX' 번지가 생략된 형태는?
'ZZZZZ 000-00번지 XXXXX' 번지로 시작하지 않는것은 혹시?
모든 유형이 정리되어야 합니다.


by 오라클초보 [2015.03.04 17:23:00]

WITH t AS
     (SELECT '103-1번지 테크노' text FROM DUAL
      UNION ALL
      SELECT '23-10번지 빌라' text FROM DUAL
      UNION ALL
      SELECT '230번지 빌라' text FROM DUAL
     )
SELECT REGEXP_SUBSTR (bungi, '[^-]+', 1, 1) fno, REGEXP_SUBSTR (bungi, '[^-]+', 1, 2) lno
  FROM(     
SELECT REGEXP_REPLACE(text, '[^0-9,-]') bungi
          FROM t
);  


by 창조의날개 [2015.03.05 11:49:10]

 

마농님이 제시하신 유형으로 만들려고 

생 쇼를 했네요..

그냥 재미삼아 보세요..


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

 


by 백면서생 [2015.03.05 14:30:41]

-- 저도 재미삼아
-- 창조의날개님 set 도용
select text
      ,regexp_substr(ext_text,'[^-]+',1,1) div_1
      ,regexp_substr(ext_text,'[^-]+',1,2) div_2
from 
(
select /*+ no_merge */
       text
      ,regexp_substr(text,'[[:digit:]-]+') ext_text
from t
)

 


by 오라클초보 [2015.03.06 10:56:02]

백면서생님 

regexp_substr(text,'[[:digit:]-]+')

이 문장 설명 좀 부탁드려도 될까요??

 


by 백면서생 [2015.03.06 11:31:44]

-- regexp_substr(text,'[[:digit:]-]+') 은  regexp_substr(text,'[0-9-]+',1,1)  같은 표현입니다.
-- text에서 첫번째 나오는 숫자나 '-', 혹은 숫자와 '-'조합으로 된 부분을 substr하라는 말입니다.

-- 그리고 여담이지만 오라클초보님께서 위에서 사용하신
-- REGEXP_REPLACE(text, '[^0-9,-]') 에서 ','를 or 형태로 사용하신것인지 
-- or 문법은 '|'이고  여기에서는 or 조건 없이 그냥 나열해주시면 됩니다. 
-- 따라서 여기서 명령은 숫자,',','-' 이외는 다 삭제하라는 말이되므로 ','은 굳이 필요는 없어보이네요

 


by 오라클초보 [2015.03.06 11:52:57]

답변 감사드립니다..

,가 or 의 의미로 사용된게 맞습니다. 제가 정확한 문법을 몰라서 한번 저렇게 작성해 봤는데 작동이 되서요..좀 더 공부가 필요하네요..^^

 

친절한 설명과 답변 감사드립니다..

 

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