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