1. ホーム
  2. mysql

[解決済み] mySQLのreplace()を使用して、複数のレコードの文字列を置換するにはどうすればよいですか?

2022-05-06 02:35:48

質問

あるデータベースには、1つのカラムに不正なデータを含むレコードが多数あり、その中で埋め込みエディターがエスケープすべきでないものをエスケープしてしまい、生成されたリンクを壊しています。

すべてのレコードの悪い文字を置換するクエリーを実行したいのですが、その方法がわかりません。私は その replace() 機能 をMySQLで使用したいのですが、クエリ内でどのように使用すればよいのでしょうか?

例えば、次のような文字列に置き換える場合、正しい構文は何でしょうか。 &lt; を実際の小山括弧( < を持つすべてのレコードで &lt; の中にある articleItem 列を作成できますか?1つのクエリでできるのか(つまり、選択と置換をすべて一度に行う)、それとも複数のクエリを行わなければならないのでしょうか?複数のクエリで行う場合、どのようにして replace() を使用して、複数のレコードのフィールドの値に対して置換を行うことはできますか?

どのように解決するのですか?

ごく一般的なレベルでは

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

あなたの場合、これらはエスケープされたと言いますが、どのようにエスケープされたのかが明記されていないので、仮にこれらが GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

クエリは実際には文字列の内部で動作するので WHERE 節でパターンマッチを行っても、パフォーマンスの向上は望めず、むしろサーバーの負担を増やすことになります。このクエリのパフォーマンスを向上させるような別のWHERE句がない限り、このように単純に更新することができます。

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

また、複数の REPLACE コール

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

また、(保存時ではなく)データ選択時に行うことも可能です。

だから、代わりに:

SELECT MyURLString From MyTable

を行うことができます。

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable