なぜ更新セットは、()ステートメントが行に一致するのに、なぜ変更されず、警告を与えないのですか?

dba.stackexchange https://dba.stackexchange.com/questions/12433

  •  16-10-2019
  •  | 
  •  

質問

私はフィールドに特定の文字列を探していて、新しい文字列に置き換えたいと思っています。具体的には、1つの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:

アーロン・バートランドのおかげで、私はそれを発見しました 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:

私が間違っていたことをお話しします!! 私は仮定に疑問を呈していませんでした。私の 予測 私が置き換えていた文字列はすべて小文字だったということでした。句は、見たすべてのものを返していました 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行を更新するが、のインスタンスは見つかりませんでした %TLD.com% その列で。どの行に影響を受けるべきかを確認するには、 SELECT 代わりは:

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

他のヒント

まず、aを使用して確認する必要があります 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

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top