Чому оператор UPDATE SET REPLACE () збігається з рядками, але не змінює жодного та не дає попереджень?


9

Я шукаю певну рядок у полі і хочу замінити її новою. Зокрема, я хочу, щоб усі посилання на одну 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

Як я можу відстежити, чому не вносяться зміни?

EDIT 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

Що я можу зробити неправильно?

EDIT 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' )

Відповіді:


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.