フィールドで特定の文字列を探していますが、新しい文字列に置き換えたいのですが。具体的には、ある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
_
変更が行われない理由を追跡するにはどうすればよいですか?
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
_
何が悪いのでしょうか?
私が間違っていたことをお伝えします!!私は仮定について質問していませんでした。私の仮定は、置換する文字列がすべて小文字であるというものでした。 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' )
_
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%';
まず、select
クエリを使用して確認する必要があります。
SELECT * FROM colleges
WHERE course_name LIKE '%&%'
次に、更新する必要があります。
UPDATE colleges
SET course_name = REPLACE(course_name, '&', '&')
WHERE id = 1
結果: Cloud & Enterprise Computing
⇒Cloud & Enterprise Computing
最後に、すべてに申請する必要があります。
UPDATE colleges
SET course_name = REPLACE(course_name, '&', '&')
結果: Corporate & Insolvency Law
⇒Corporate & Insolvency Law