태그 보관물: dml

dml

UPDATE SET REPLACE () 문이 행과 일치하지만 아무것도 변경하지 않고 경고를 표시하지 않는 이유는 무엇입니까? 0 변경 사항이없는 이유를 어떻게 추적 할

필드에서 특정 문자열을 찾고 있는데 새 문자열로 바꾸려고합니다. 특히, 한 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' )



답변

REPLACE그런 식으로 와일드 카드를 사용하지 않습니다. 나는 당신이 의미한다고 생각합니다 :

UPDATE [table] 
  SET [column] = REPLACE([column],'TLD.com','TLD.org')
  WHERE [column] LIKE '%TLD.com%';

당신은 더 없다 WHERE가, 그래서 절을 시도 618 개 행을 업데이트 할 수 있지만, 어떤 경우 찾지 못했습니다 %TLD.com%해당 열의를. 어떤 행이 영향을 받는지 보려면 SELECT대신 다음을 실행하십시오 .

SELECT [column], REPLACE([column], 'TLD.com', 'TLD.org') AS new_value
  FROM [table]
  WHERE [column] LIKE '%TLD.com%';


답변

먼저 select쿼리를 사용하여 확인해야 합니다.

SELECT * FROM colleges
WHERE course_name LIKE '%&amp%'

다음으로 업데이트해야합니다.

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')
WHERE id = 1

결과 : Cloud &amp Enterprise ComputingCloud & Enterprise Computing

마지막으로 다음을 모두 신청해야합니다.

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')

결과 : Corporate &amp Insolvency LawCorporate & Insolvency Law


답변