특정위치에있는 한글 제거에 관한 질문입니다. 0 6 1,037

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별로 노가다를 해야될것 같고

혼자서는 도저히 방법이 떠오르지가 않아

고수님들에게 질문드려봅니다.

 

by 마농 [2020.04.21 17:46:23]

원본만 있네요? 원하는 결과도 대비해서 보여주세요.
193-1 만 있나요? 다른 수는 없는지? (123-12) 다양한 예제를 주세요.
- 가 없이 숫자만 있거나? (B지구 193)
아예 숫자가 없는 자료는 없는지? (B지구)
숫자 다음에 공백이 오는 경우는 없는지? (A지구 193-1 구역)
숫자가 여러번 나오는 자료는 없는지? (본부 1-2지구 3-1구역)
등등등...


by 이제시작이야 [2020.04.22 09:36:11]

다양한 케이스들은 생각 못했었는데 마농님 말씀을 듣고 생각해보니 케이스별로 방법이 다르겠더군요..

나름대로 생각한 케이스들은

본부 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

이렇게 바꾸고싶습니다!


by 마농 [2020.04.22 10:04:37]
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
;

 


by 이제시작이야 [2020.04.22 10:15:49]

친절한 답변 감사드립니다^^

혹시

\1이 이해가 잘 안가서 그러는데

추가로 질문드려도 될까요?


by 마농 [2020.04.22 10:59:09]

앞의 패턴 표현식 중 첫번째 괄호 부분을 \1 로 표현합니다.
괄호가 여러개 있으면 두번째 괄호는 \2
(X동 000-00)..... 을 찾아서 괄호 부분만 남기겠다는 의미


by 이제시작이야 [2020.04.23 13:27:30]

친절한 설명 감사합니다^^

알려주신걸 익히면 여러 작업이 가능해지겠네요!

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