Зачем утверждение обновления Set Set reface () соответствует строкам, но не изменять ни один и не дать предупреждений?
Вопрос
Я ищу определенную строку в поле и хочу заменить ее новой строкой. В частности, я хочу, чтобы все ссылки на один 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 '%&%'
Далее мы должны обновить:
UPDATE colleges
SET course_name = REPLACE(course_name, '&', '&')
WHERE id = 1
Полученные результаты: Cloud & Enterprise Computing
⇒ Cloud & Enterprise Computing
Наконец, мы должны подать заявку на все:
UPDATE colleges
SET course_name = REPLACE(course_name, '&', '&')
Полученные результаты: Corporate & Insolvency Law
⇒ Corporate & Insolvency Law