Szukam określonego ciągu w polu i chcę go zastąpić nowym ciągiem. W szczególności chcę, aby wszystkie odniesienia do jednego adresu URL zostały zmienione na inny adres URL. Stworzyłem tę instrukcję SQL i uruchamiam ją po wyświetleniu mysql>
monitu w CentOS 5.5 za pomocą MySQL Community Server 5.1.54.
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
Odpowiedź brzmi:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
Jak mogę sprawdzić, dlaczego nie wprowadzono żadnych zmian?
EDYCJA 1:
Dzięki Aaronowi Bertrandowi odkryłem, że REPLACE()
nie potrafię obsłużyć symboli wieloznacznych i użyłem go całkowicie źle (pomyśl: brakująca WHERE
klauzula). Oto moje zreformowane oświadczenie:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
Do którego otrzymuję stary, znajomy:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
Co mogę zrobić źle?
EDYCJA 2:
Powiem ci, co robiłem źle !! Nie kwestionowałem założeń. Moje założenie było takie, że ciąg, który zastępowałem, był pisany małymi literami. Klauzula WHERE zwracała wszystkie rzeczy, które wyglądałyLIKE %companydomain.com%
. Obejmuje to wszystkie permutacje wielkich liter, takie jak CompanyDomain.com, CoMpAnYdOmAiN.com itp.
Przekazał to, na REPLACE()
co wtedy dokładnie szukał companydomain.com, a następnie zastąpił go companydomain.org.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
Oczywiście moje rekordy zostały zwrócone, ale nic nie zostało zastąpione. Po zmianie, REPLACE()
aby uwzględnić wielkie litery, wszystkie rekordy zostały zaktualizowane i wydaje się, że wszystko jest w porządku. Prawidłowa REPLACE()
składnia mojego scenariusza była więc następująca:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )