Почему оператор UPDATE SET REPLACE () соответствует строкам, но не изменяет ни один и не выдает предупреждений?

9

Я ищу определенную строку в поле и хочу заменить ее новой строкой. В частности, я хочу, чтобы все ссылки на один URL-адрес были изменены на другой URL-адрес. Я создал этот оператор SQL и запускаю его в mysql>командной строке на CentOS 5.5 с использованием MySQL Community Server 5.1.54.

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:

Благодаря Аарону Бертрану я обнаружил, что 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' )
Wesley
источник

Ответы:

12

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%';
Аарон Бертран
источник
0

Сначала мы должны проверить с помощью 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

Соломон
источник