MySQL 문자열 교체


559

URL (id, url)을 포함하는 열이 있습니다.

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

"업데이트"라는 단어를 "뉴스"로 변경하고 싶습니다. 스크립트를 사용하여이 작업을 수행 할 수 있습니까?


답변:


1283
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

이제 같은 행

http://www.example.com/articles/updates/43

될거야

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/


23
빠른 질문입니다. 실제로 "WHERE"절이 필요합니까?
존 크로포드

55
@JohnCrawford 링크의 기사에 따르면 : " WHERE LIKE찾을 텍스트가 없으면 행이 업데이트되지 않지만 속도가 빨라야 하기 때문에 끝에 절 을 추가 할 필요 는 없습니다 . "
Giraldi

3
WHERE 절은 대체 대상을 구체적으로 제어합니다. 하나가 없으면 모든 행이 검사되고 일치하는 것이 있으면 잠재적으로 데이터가 교체됩니다.
Carlton

11
이 경우 WHERE는 LIKE '%%'아무 인덱스도 사용하지 않기 때문에 쓸모가 없다고 생각합니다. 예를 들어 WHERE에 다른 부분 date_added > '2014-07-01'이 있으면 도움이 될 수도 있습니다.
Fabrizio

13
나는 mysql에서 무언가를 교체 할 필요가있을 때 항상 참조하기 위해 여기에 온다
Daniel Pecher

141

예, MySQL에는 REPLACE () 함수가 있습니다.

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
    -> 'WwWwWw.mysql.com'

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

사용할 때 별칭을 만들면 더 쉽습니다. SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....

OP가 updates문자열에 한 번만 나타나는 한 작동합니다. 그렇지 않으면 MySQL에서 직접적인 고통 인 직접 문자열 조작에 갇혀 있습니다. 이 시점에서 일회용 스크립트를 작성하여 필드를 선택하고 클라이언트를 조작 한 후 다시 작성하는 것이 더 쉽습니다.
Marc B

20

대체 기능은 당신을 위해 작동합니다.

REPLACE(str,from_str,to_str)

문자열 from_str이 문자열 to_str로 대체 된 문자열 str을 리턴합니다. REPLACE()from_str을 검색 할 때 대소 문자를 구분합니다.


9

replace () 함수를 사용하면됩니다.

where 절과 함께

update tabelName set columnName=REPLACE(columnName,'from','to') where condition;

where 절없이

update tabelName set columnName=REPLACE(columnName,'from','to');

참고 : 위의 쿼리는 테이블에서 직접 업데이트 레코드 인 경우 선택 쿼리를 원하고 데이터가 테이블에 영향을 미치지 않아야하는 경우 다음 쿼리를 사용할 수 있습니다

select REPLACE(columnName,'from','to') as updateRecord;

6

동적으로 REPLACE그리고 UPDATE다른 열에 따라 gmaggio의 답변 외에도 다음 과 같이 할 수 있습니다.

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

내 예제에서 문자열 articles/news/은 저장되며 절 에서 other_table t2사용할 필요가 없습니다 .LIKEWHERE

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