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