web-dev-qa-db-ja.com

UPDATE SET REPLACE()ステートメントが行に一致するのに、何も変更せず、警告を出さないのはなぜですか?

フィールドで特定の文字列を探していますが、新しい文字列に置き換えたいのですが。具体的には、あるURLへのすべての参照を別のURLに変更する必要があります。このSQLステートメントを作成し、MySQL Community Server 5.1.54を使用して、CentOS 5.5の_mysql>_プロンプトで実行しています。

_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:

Aaron Bertrandのおかげで、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' )
_
9
Wesley

REPLACEは、そのようにワイルドカードを使用しません。私はあなたが意味したと思います:

UPDATE [table] 
  SET [column] = REPLACE([column],'TLD.com','TLD.org')
  WHERE [column] LIKE '%TLD.com%';

WHERE句がないため、618行を更新するにはtriedですが、その列で%TLD.com%のインスタンスは見つかりませんでした。影響を受ける行を確認するには、代わりにSELECTを実行します。

SELECT [column], REPLACE([column], 'TLD.com', 'TLD.org') AS new_value
  FROM [table]
  WHERE [column] LIKE '%TLD.com%';
12
Aaron Bertrand

まず、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

0
Solomon