Зачем утверждение обновления Set Set reface () соответствует строкам, но не изменять ни один и не дать предупреждений?

dba.stackexchange https://dba.stackexchange.com/questions/12433

  •  16-10-2019
  •  | 
  •  

Вопрос

Я ищу определенную строку в поле и хочу заменить ее новой строкой. В частности, я хочу, чтобы все ссылки на один 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:

Я скажу вам, что я делал не так !! Я не ставил под сомнение предположения. Мой предположение была то, что струна, которую я заменял, была во всех нижних случаях. Пункт «Где» возвращалось все, что выглядело 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top