mySQL replace ()를 사용하여 여러 레코드의 문자열을 바꾸려면 어떻게해야합니까?


166

우리는 하나의 열에 나쁜 데이터가있는 레코드가 많은 데이터베이스를 가지고 있습니다. 내장 편집기는 이스케이프되어서는 안되는 일부 항목을 이스케이프하고 생성 된 링크를 깨고 있습니다.

모든 레코드에서 잘못된 문자를 대체하기 위해 쿼리를 실행하고 싶지만 수행 방법을 알 수는 없습니다. MySQL 에서 replace()함수 를 찾았 지만 쿼리에서 어떻게 사용할 수 있습니까?

내가 문자열 교체하기를 원한다면 예를 들어, 어떤 올바른 구문 될 것이다 &lt;실제보다 적게보다는 꺾쇠 괄호 (에 <있는 모든 레코드) &lt;articleItem열을? 단일 쿼리로 수행 할 수 있습니까 (예 : 한 번에 모두 선택하여 바꾸기) 여러 쿼리를 수행해야합니까? 여러 쿼리 인 경우에도 replace()두 개 이상의 레코드에서 필드 값을 바꾸려면 어떻게해야 합니까?


5
무엇이든하기 전에 데이터베이스도 백업해야합니다. 또한 업데이트를 사용하여 모든 필드를 업데이트합니다.
Matt


답변:


395

매우 일반적인 수준에서

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

귀하의 경우 귀하는 이들이 탈출했다고 말하지만 탈출 방법을 지정하지 않았으므로 탈출했다고 가정 해 봅시다. GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

쿼리가 실제로 문자열 내에서 작동하기 WHERE때문에 패턴 일치를 수행하는 절은 성능을 향상시키지 않을 것입니다. 실제로 서버에 더 많은 작업을 생성 할 것입니다. 이 쿼리의 성능을 향상시킬 다른 WHERE 절 멤버가 없으면 다음과 같이 간단히 업데이트 할 수 있습니다.

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

여러 REPLACE통화를 중첩 할 수도 있습니다

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

데이터를 저장할 때와 반대로 데이터를 선택할 때도이를 수행 할 수 있습니다.

따라서 대신 :

SELECT MyURLString From MyTable

넌 할 수있어

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable


7
작은 퀴즈 : GREATERTHAN is '>'
Olivier Dulac

23
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

&lt;s를 수정했습니다 . 다음과 같이 &의 인코딩을 사용해야합니다. &amp;:)
Dan J

나는 그것을 다시 편집했다. 알려 줘서 고마워. 내가 어떻게 알지 못한다고 말한 순간 그것은 나에게 떠올랐다. 그것이 내 세상이 작동하는 방식입니다. :)
simshaun

6

이것을 확인하십시오

UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')

예를 들어 샘플 문자열 :

UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')

열 / 필드 이름이있는 EG :

UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')

4

다음과 같은 저장 프로 시저를 작성할 수 있습니다.

프로 시저 작성 sanitize_ TABLE ()

시작

# 공백을 밑줄로 바꿉니다.

업데이트 테이블 SET FieldName = REPLACE ( FieldName , "", "_") WHERE FieldName 이 NULL이 아닙니다.

# 삭제 점

업데이트 테이블 SET FieldName = REPLACE ( Field. , ".", "") WHERE FieldName 이 NULL이 아닙니다.

# 삭제 (

업데이트 테이블 SET FieldName = REPLACE ( FieldName , "(", "") WHERE FieldName 이 NULL이 아닙니다.

#delete)

업데이트 테이블 SET FieldName = REPLACE ( FieldName , ")", "") WHERE FieldName 이 NULL이 아닙니다.

당신이 원하는 문자를 #raplace 또는 삭제

# ..........................

종료

이런 식으로 테이블에 대한 제어를 모듈화했습니다.

또한 입력 매개 변수를 살균하는 테이블을 사용하여 매개 변수를 저장하는 저장 프로 시저를 일반화 할 수도 있습니다


1
이러한 null 검사는 중복됩니다
kiedysktos

mysql 저장 프로 시저를 만드는 쉽고 안전한 도구가 있습니까?
Ivan Slaughter

0

도움이 될 것입니다.

UPDATE play_school_data SET title= REPLACE(title, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

결과:

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