필드에서 특정 문자열을 찾고 있는데 새 문자열로 바꾸려고합니다. 특히, 한 URL에 대한 모든 참조가 다른 URL로 변경되기를 원합니다. 이 SQL 문을 작성하고 mysql>
MySQL Community Server 5.1.54를 사용하여 CentOS 5.5 에서 프롬프트 에서 실행하고 있습니다.
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
응답은 다음과 같습니다.
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
변경 사항이없는 이유를 어떻게 추적 할 수 있습니까?
편집 1 :
Aaron Bertrand 덕분에 REPLACE()
와일드 카드를 처리 할 수없고 완전히 잘못 사용하고 있음을 발견했습니다 (생각 : 누락 WHERE
절). 다음은 제가 개혁 한 진술입니다.
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
내가 익숙하고 오래된 것을 받는다.
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
내가 뭘 잘못하고 있니?
편집 2 :
내가 뭘 잘못했는지 말해 줄게 !! 나는 가정에 의문을 제기하지 않았다. 내 가정 은 내가 교체 한 문자열이 모두 소문자라고 가정했습니다 . WHERE 절은 모든 것을 보았습니다LIKE %companydomain.com%
. 여기에는 CompanyDomain.com, CoMpAnYdOmAiN.com 등과 같은 모든 대문자 치환이 포함됩니다.
그것은 그것을 전달한 REPLACE()
다음 companydomain.com을 엄격히 찾고 companydomain.org로 대체했습니다.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
물론 내 기록은 반환되었지만 아무것도 교체되지 않았습니다. REPLACE()
대문자를 고려하도록 변경 한 후에 는 모든 레코드가 업데이트되었으며 모든 것이 정상인 것 같습니다. REPLACE()
내 시나리오 의 올바른 구문은 다음과 같습니다.
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )