주소DB 최신화 작업중입니다.
사용자가 조회조건을 도로명 + 건물본번 식으로 입력을 하는데
도로명과 건물본번을 구분이 필요합니다.
예로 가평로19는 가평로 값과 19값을 가져와야 합니다.
해서 아래와 같이 작업을 했는데
SELECT TRANSLATE('가평로19', 'a0123456789', 'a') 도로명,
REGEXP_REPLACE('가평로19', '[^0-9]') 건물본번
FROM DUAL
위 같은 경우에는 정상적으로 가져오나
도로명에 숫자가 있는 경우가 있더라구요.
예로 가평1로19 이런경우에는
SELECT TRANSLATE('가평1로19', 'a0123456789', 'a') 도로명,
REGEXP_REPLACE('가평1로19', '[^0-9]') 건물본번
FROM DUAL
도로명이 가평로, 건물본번이 119 로 불러와 버립니다.
도로명은 숫자로 끝나는 경우가 없이 항상 문자로 끝나고
건물본번은 숫자타입입니다.
해서 끝자리부터 체크하여 문자 전까지 짤라
가평1로 , 19 이런식으로 표기하는 방법이 있을까요?
WITH t AS ( SELECT '가평로' addr FROM dual UNION ALL SELECT '가평로19' FROM dual UNION ALL SELECT '가평1로19' FROM dual ) SELECT addr -- 1. 일반 문자 함수 이용 , RTRIM(addr, '0123456789') addr1_1 , REPLACE(addr, RTRIM(addr, '0123456789')) addr2_1 -- 2. 정규표현식 함수 이용 , REGEXP_REPLACE(addr, '[0-9]+$') addr1_2 , REGEXP_SUBSTR (addr, '[0-9]+$') addr2_2 FROM t ;
마농님 정규식 설명 좀 부탁드려도 될까요?
, REGEXP_REPLACE(addr, '[0-9]+$') addr1_2
=> [0-9]+ = 0부터 9까지 반복한다 로 알고 있는데 끝에 $ 가 붙어서 어떻게 동작되는건지요?
, REGEXP_SUBSTR (addr, '[0-9]+$') addr2_2
=> 이건 숫자만 추출하려고 한것 같은데.. 어떻게 되는건지 전혀 모르겠네요...
정규식을 찾아보고 있는데요..
[0-9] => 0부터 9 까지의 범위를 나타내고
+ => 반복
$ =>문자열로 끝난다.
라고 설명이 되어 있는데..저런게 조합되어 어떻게 사용되는 건지 이해가 잘 되지 않네요..