1

簡単な背景として、「songs」という名前のテーブルを持つ小さなデータベースがあります。このテーブルには、マシンにある音楽のタイトル、アーティスト、および URL が保持されます。いくつかの一重引用符がトラック タイトルから削除されており (たとえば、don't は dont として保存されます)、それらを置き換えようとしています。このクエリを取得して行に影響を与えることはできません:

UPDATE Songs
SET Title = REPLACE (Title, 'dont', 'don\'t')

愛がない。これは正しい構文ではありませんか? 0 行が更新されたことがわかります。問題がなければ、バージョン 5.5.27 を実行しています。そこに不適切なドントを含む数百行があることは知っています...結果をメモ帳にダンプし、ドントで検索/置換を実行し、そのように更新ステートメントを実行するだけですが、ちょっとハックです。友達のアイデアはありますか?

いくつかのサンプル行:

"51","Dont Stay Home","311","311 Greatest Hits","Rap","E:\Music\311\311GreatestHits\dontstayhome.mp3"
"229","Dont Turn Around","Ace Of Base","The Very Best Of","Dance","E:\Music\AceofBase\VeryBestOf\03-ace_of_base-dont_turn_around.mp3"

フィールドの順番は、ID、タイトル、アーティスト、アルバム、ジャンル、パスです。

4

2 に答える 2

1

このようにしなければなりません

UPDATE Songs
    SET Title = REPLACE(Title, 'Dont', 'Don\'t');
                                ^       ^

その理由は

REPLACE(str,from_str,to_str)

文字列 from_str のすべての出現箇所を文字列 to_str に置き換えた文字列 str を返します。REPLACE() は、 from_str を検索するときに大文字と小文字を区別して一致を実行します。

どちらかのケースを置き換えたい場合は、次のことができます

UPDATE Songs 
   SET Title = REPLACE(REPLACE(Title, 'Dont', 'Don\'t'), 'dont', 'don\'t')
 WHERE Title LIKE '%dont%' -- it makes sense to limit update to only those rows that have dont in it no matter case

これがSQLFiddleのデモです

于 2013-08-27T02:56:00.337 に答える