MySQL은 필드에서 일부 텍스트를 검색하고 바꿉니다.


257

어떤 MySQL 쿼리가 테이블의 특정 필드에서 텍스트를 검색하고 대체합니까?

즉 검색 foo과 교체 bar값으로 필드와 레코드가되도록 hello foo된다 hello bar.

답변:


490

테이블 이름과 해당 필드를 변경 table_name하고 field일치 시키십시오.

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;

79
업데이트 [table_name] SET [field_name] = REPLACE ( [field_name], "foo", "bar");
Meetai.com 2013

6
사용하지 않는 것이 더 빠르다고 생각합니다 WHERE instr(field, 'foo') > 0;(따라서 2 번의 검색을 수행하지 않을 것입니다).
inemanja

2
@treddell, SQL 문자열에서 위치가 1에서 시작하지 않습니다.
Alexis Wilke

2
@inemanja, @Air WHERE조항 없이 UPDATE모든 행에 ...
Alexis Wilke

7
프링처럼, 그런 의견을 남기고 싶다면 이유를 설명하고 싶을 것입니다. 원래의 조언에서 실수였습니까? 그리고 데이터베이스를 완전히 변경하기 전에 먼저 백업해야한다는 것을 알고 있습니까?
pdwalker

86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

2
나를 도와 주었다. 모든 멍청한 놈에 대괄호를 제거하십시오.
Anantha Raju C 4

8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

예를 들어, John의 모든 발생을 Mark로 바꾸려면 아래에서 사용합니다.

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');


4

내 경험상 가장 빠른 방법은

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

INSTR()방법은 두 번째로 빠른 및 생략 WHERE모두 절하면 열이 인덱싱되지 않은 경우에도, 가장 느린입니다.


어디에 다른 절을 추가해야하기 때문에 저에게 효과적입니다. UPDATE 테이블 _의 SET 필드 = REPLACE (필드, '갑', '바') WHERE 필드 LIKE '% foo는 %'AND otherfield = 'foo22'
최대

1

교체 문자열 함수는 할 것입니다.


나를 위해 작동합니다. 질문 해석 방법에 따라 다릅니다. 데이터베이스 항목을 변경해야하는 경우을 사용하십시오 update. 그렇지 않으면이 솔루션은 필드를 업데이트하지 않고 사용할 수 있으므로 훨씬 좋습니다.
Gruber

0

위의 명령 줄을 다음과 같이 사용했습니다. update TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); 목적은 And를 and로 대체하는 것이 었습니다 ( "A"는 소문자 여야 함). 문제는 데이터베이스에서 "And"를 찾을 수 없지만 "% And %"와 같이 사용하면 단어의 일부이거나 이미 소문자 인 다른 AND와 함께 찾을 수 있다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.