테스트 사이트 - 개발 중인 베타 버전입니다

SQL 특정 문자 일괄변경 채택완료

어떠리 11년 전 조회 18,936

check라는 필드에 아래와 같이 데이터가 들어가 있습니다.

 

abcdefg-1234

abcdefg-3333

abcdefg-5531

95438

ddddccc

 

여기서 abcdefg- 포함된 데이터의 문자만을 일괄적으로 없애고자 하는 쿼리문을

도움받고자 합니다.

 

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
T
11년 전

QA 제목에 의 거하여 특정문자라고 명시 되었기 때문에 해당 특정 문자는 고정으로 가정하고 작성했던 답변

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

http://sir.co.kr/qa/?wr_id=35885&page=1&posting=ok&sca=&sfl=&stx=&sst=&sod=&spt=0&page=1&vsst=lastet&vpage=1#answer_35893">http://sir.co.kr/qa/?wr_id=35885&page=1&posting=ok&sca=&sfl=&stx=&sst=&sod=&spt=0&page=1&vsst=lastet&vpage=1#answer_35893

 

 

 

 

 

 

 

반대로 특정 문자가 고정 되있지 않고 유동적이며 자릿수는 고정일때의 답변

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

자리 수 기준으로 데이터를 변형하는 방법입니다.

 

변경하고자 하는 데이터

abcdefg-1234567

에서

​abcdefg-

의​ 글자수가 정해져 있다면 다음 같은 시도로 지정된 글자 수 만큼 문자열을 제거 할 수 있습니다.

  

</p><p>​UPDATE 테이블 SET `check` = <span style="color: rgb(75, 99, 124); font-family: ����, Arial, Verdana; font-size: 12px; line-height: 16.799999237060547px; text-align: justify;">substring</span><span style="font-family: 돋움, Dotum, Helvetica, sans-serif; font-size: 12px; line-height: 1.5;">​</span><span style="font-family: 돋움, Dotum, Helvetica, sans-serif; font-size: 12px; line-height: 1.5;">(`check`, 9);  </span></p><p>
 

위 처럼 쿼리를 날렸을 경우 check 문자열의 가장 앞자리 부터 8번째 자리 까지 지우고 9번째 부터의 문자열을 추출하여 업데이트가 가능합니다.

 

</span></font></p><p><font face="돋움, Dotum, Helvetica, sans-serif"><span style="font-size: 12px; line-height: 18px;">결과: 1234567​</span></font></p><p><font face="돋움, Dotum, Helvetica, sans-serif"><span style="font-size: 12px; line-height: 18px;">
 


하지만 위조건으로 데이터를 변환 할 수있는 데이터(은)는

check​의 데이터가 abcdefg-1234567​ 처럼 되있어야 한다는 점입니다.

무조건 앞자리부터 8자리를 지우기 때문이죠.



이를 커버 하기 위해서는 조건을 추가 하셔야 합니다.


예를 들어

</span></font></p><p><font face="돋움, Dotum, Helvetica, sans-serif"><span style="font-size: 12px; line-height: 18px;">​UPDATE 테이블 SET `check` = </span></font><span style="color: rgb(75, 99, 124); font-family: ����, Arial, Verdana; font-size: 12px; line-height: 16.799999237060547px; text-align: justify;">substring</span><span style="font-size: 12px; line-height: 18px; font-family: 돋움, Dotum, Helvetica, sans-serif;">​</span><span style="font-size: 12px; line-height: 18px; font-family: 돋움, Dotum, Helvetica, sans-serif;">(`check`, 9) where ​`check` like '%-%'​</span></p><p><font face="돋움, Dotum, Helvetica, sans-serif"><span style="font-size: 12px; line-height: 18px;">

처럼 말이죠.

 

 

 

</span></p><p><span style="font-size: 12px; line-height: 18px; font-family: 돋움, Dotum, Helvetica, sans-serif;"></span><span style="color: rgb(75, 99, 124); font-family: ����, Arial, Verdana; font-size: 12px; line-height: 16.799999237060547px; text-align: justify;">- SUBSTRING(str, pos) 혹은 SUBSTRING(str FROM pos)</span></p><p style="margin: 2px; color: rgb(75, 99, 124); font-family: ����, Arial, Verdana; font-size: 12px; line-height: 16.799999237060547px; text-align: justify;">- 문자열 str 에서 pos 위치부터 끝까지 문자를 잘라낸다.</p><p style="margin: 2px; color: rgb(75, 99, 124); font-family: ����, Arial, Verdana; font-size: 12px; line-height: 16.799999237060547px; text-align: justify;"> </p><p style="margin: 2px; color: rgb(75, 99, 124); font-family: ����, Arial, Verdana; font-size: 12px; line-height: 16.799999237060547px; text-align: justify;">mysql> select substring('Quadratically',5);
+------------------------------+
| substring('Quadratically',5)     |
+------------------------------+
| ratically                                 |
+------------------------------+
1 row in set (0.00 sec)</p><p><span style="color: rgb(75, 99, 124); font-family: ����, Arial, Verdana; font-size: 12px; line-height: 16.799999237060547px; text-align: justify;">mysql></span><span style="font-size: 12px; line-height: 18px; font-family: 돋움, Dotum, Helvetica, sans-serif;"> </span></p><p><span style="font-size: 12px; line-height: 18px; font-family: 돋움, Dotum, Helvetica, sans-serif;">

 

참고: http://jlancer.net/board/article_view.jsp?article_no=6&board_no=4">http://jlancer.net/board/article_view.jsp?article_no=6&board_no=4

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

11년 전
abcdefg- 뒤에 있는 문자는 1234 그대로 있어야 합니다.
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

T
Terrorboy
11년 전
UPDATE 테이블 SET `check` = REPLACE(`check`, 'abcdefg-', '');

이렇게 하면 abcdefg-만 지워 집니다.

단...abcdefg-가 고정이 아닐것 같은데...

해당 조건은 다음 댓글에 이어 작성 합니다.

댓글을 작성하려면 로그인이 필요합니다.

T
11년 전

abcdefg- 이문자열이 고정화라는 기준하에 아래처럼 사용가능합니다. UPDATE 테이블 SET `check` = REPLACE(`check`, 'abcdefg-', '');





UPDATE 테이블 SET 필드 = REPLACE(필드, '바꾸고 싶은말', '바꿀말');

 

 

ps. 정규식으로 바꾸는 것은 안해봤네요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

제가 알기로는 mysql에서 정규표현식으로 치환(replace)하는 방법은 없는 것으로 알고 있습니다. 

 

UDF를 만들어서 하는 방법도 있겠지만 복잡하겠지요.

 

최선의 방법은 RLIKE를 이용해서 해당 레코드만 뽑아내서 치환 후 update 해주는 프로그램을 짜시는게 제일 간단한 방법이 아닐까 싶습니다. 

 

도움이 못되 죄송합니다. ^^;;

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인