특정 문자열 치환 1 14 3,145

by 깡냉E [SQL Query] [2012.10.16 14:45:12]


column
-------------------------
8-873-200 ~201
8-873-200 ~201
8-873-200 ~201
8-880-001
8-911-001
8-918-001
SA-SB010
SA-SQ011
SA-SS610
SA-TE190-01
SA-TE190-02
SA-TE198-05

위와 같은 데이터에서 맨 앞의 8-를 빼서 아래와 같이 update를 하고 싶습니다.

column
-------------------------
873-200 ~201
873-200 ~201
873-200 ~201
880-001
911-001
918-001
SA-SB010
SA-SQ011
SA-SS610
SA-TE190-01
SA-TE190-02
SA-TE198-05

어떻게 update문 쿼리를 작성해야 할까요? 답변 부탁드립니다.
by 제로 [2012.10.16 15:04:25]
update 테이블명
set 컬럼명 = regexp_replace(컬럼명, '^(8-)')
where 조건;

by 손님 [2012.10.16 15:09:05]

그냥 단순하게 '8-'만 없앤다면.. 다음과 같이 하면 안될까요?

with tt as
(
    select 1 as num, '8-873-200 ~201' as num1 from dual
    union all
    select 2, '8-873-200 ~201' from dual
    union all
    select 3, 'SA-SB010' from dual
    union all
    select 4, 'SA-SQ011' from dual
)

select num, replace(num1, '8-', '') from tt;


by 깡냉E [2012.10.16 15:12:12]

제로 // 답변 감사드립니다.

그런데 그렇게 쿼리문을 작성했을 경우,

918-001 같이 8-가 중간에 들어간 값들은 변경되지 않나요?

8-가 맨 앞에 있을 경우에만 빼야 되거든요.

by 필상 [2012.10.16 15:21:11]

^(8-) 에서 ^가 시작을 의미하는 거로 알고 있습니다.
정규식 함 찾아 보세요...^_^;;

by 깡냉E [2012.10.16 15:23:51]

필상 // 아;; 그렇군요.

실제로 테스트 해보니, 맨 앞에 있는 8-만 제거해 주네요. ^^;

by 깡냉E [2012.10.16 15:24:44]

제로 // 많은 도움이 되었습니다. 고맙습니다. ^^;


by 손님 [2012.10.16 15:40:33]

정규표현식을 쓸 필요도 없이 아래와 같이 하면 되겠죠.
LTRIM(컬럼명, '8-')

www.soqool.com


by 마농 [2012.10.16 16:10:37]

LTRIM(컬럼명, '8-') 하면 '8-' 만 없어지는게 아니라
8888
-----
-8-
8-8-8-8-8-
등등등 다 없어지게 됩니다.
즉, 8 이나 - 가 아닌 글자를 만날때까지 맨앞의 8과 - 는 모두 사라집니다.


by 깡냉E [2012.10.16 16:11:16]

손님 // 말씀하신 대로 LTRIM(컬럼명, '8-') 하면,

918-001 같은 데이터의 중간에 있는 8-도 치환되지 않나요?

맨 앞에 오는 8-만 치환해야 하거든요.


by 마농 [2012.10.16 16:15:42]

LTRIM 은 중간값을 바꾸는 함수는 아닙니다.
맨 왼쪽(앞)의 글자만 바꾸죠.
다만 연속된 모든 값을 바꾸므로 요구사항을 만족하지는 않네요..

깡냉E 님은 답글에 대해 실행도 해보기 전에 지레짐작으로 걱정부터 하시네요?
실행 후 데이터 확인 한 뒤에 걱정하세요.


by 손님 [2012.10.16 16:41:21]

그냥 간단히
update table set column = DECODE(substr(column,1,2), '8-', replace(column, '8-',''), column) ;
이렇게 하면 되지않을까요?


by 깡냉E [2012.10.16 16:45:07]

마농 // 답변 및 조언, 모두 감사드립니다. ^^;

by 손님 [2012.10.16 18:11:47]

매뉴얼을 꼼꼼하게 읽지 않고, 테스트도 안해보니 잘못된 정보를 드렸네요. 하하.
조금이라도 혼란을 야기시켰다면 죄송합니다.

www.soqool.com


by 깡냉E [2012.11.01 11:43:07]

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