by 이제시작이야 [Oracle 기초] rtrim regexp_replace 정규식 제거 [2020.04.21 17:09:59]
안녕하세요. 요즘 한창 오라클을 공부하고있는 오라클 새내기입니다.
다름이아니라 데이터 정리에 관해서 공부하고있는 도중
col1
A지구 193-1지역
본부 A지구 193-1구역
A지구 193-1구역지역
A지구 193-1
이런식의 데이터들이 있는 test테이블의 col1컬럼에서
193-1오른쪽에있는 한글만 제거하고 싶은데
rtrim을 이용해서
select rtrim(col1,'[가-힣]') from test;
을 사용해도 안돼고,
정규식을 사용하자니 case별로 노가다를 해야될것 같고
혼자서는 도저히 방법이 떠오르지가 않아
고수님들에게 질문드려봅니다.
다양한 케이스들은 생각 못했었는데 마농님 말씀을 듣고 생각해보니 케이스별로 방법이 다르겠더군요..
나름대로 생각한 케이스들은
본부 A지구 본동(한글만 있는경우)
A지구 1동 674A지구(숫자옆에 한글이 붙어 있는경우)
1중대 B지구 2동 667-7 2동(숫자 다음에 공백이 오는경우)
본부 D지구 4동 3-1구역(숫자가 여러번 나오는경우)
2중대 A지구 4동 193-1.0(숫자옆에 소수점이 들어간 경우)
본부 A지구 본동 192-1 방위본부 동관 101호(숫자옆에 공백 + 한글 + 숫자가있는경우)
이러한 케이스들이고
위와같은 케이스들을
본부 A지구 본동
A지구 1동 674
1중대 B지구 4동 3-1
본부 D지구 4동 3-1
2중대 A지구 4동 193-1
본부 A지구 본동 192-1
이렇게 바꾸고싶습니다!
WITH t AS ( SELECT '본부 A지구 본동' v FROM dual UNION ALL SELECT 'A지구 1동 674A지구' FROM dual UNION ALL SELECT '1중대 B지구 2동 667-7 2동' FROM dual UNION ALL SELECT '본부 D지구 4동 3-1구역' FROM dual UNION ALL SELECT '2중대 A지구 4동 193-1.0' FROM dual UNION ALL SELECT '본부 A지구 본동 192-1 방위본부 동관 101호' FROM dual ) -- [XX동 000-00] 형태를 찾으면 될 것 같네요. SELECT v , REGEXP_REPLACE(v, '(.동 [0-9-]+).*$', '\1') x FROM t ;