web-dev-qa-db-ja.com

mySQLのreplace()を使用して複数のレコード内の文字列を置き換える方法はありますか。

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

すべてのレコードの不正な文字を置き換えるためにクエリを実行したいのですが、その方法がわかりません。 MySQLに replace()関数 が見つかりましたが、クエリ内でどのように使用できますか?

たとえば、articleItem列に&lt;があるすべてのレコードで、ストリング<を実際の小なり山括弧(&lt;)に置き換えたい場合、正しい構文は何でしょうか。 1回のクエリで実行することはできますか(つまり、すべてを一度に選択して置き換えることもできます)。それとも、複数のクエリを実行する必要がありますか。複数のクエリがある場合でも、replace()を使用して複数のレコードのフィールドの値を置き換える方法はありますか。

160
EmmyS

非常に一般的なレベルで

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

379
Raj More
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')
22
simshaun

これをチェックして

UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')

例えばサンプル文字列の場合:

UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')

列/フィールド名付きのEG:

UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')
6
Lead Developer

あなたはこのようなストアドプロシージャを書くことができます:

CREATE PROCEDUREサニタイズ_TABLE()

ベギン

#スペースをアンダースコアで置き換えます

UPDATE テーブル SET FieldName = REPLACE(FieldName、 ""、 "_")WHERE FieldNameがNULLではありません。

#ドットを削除

UPDATE テーブル SET FieldName = REPLACE(FieldName、 "。"、 "")WHERE FieldNameがNULLではありません。

#delete(

UPDATE テーブル SET FieldName = REPLACE(FieldName、 "("、 "")WHERE FieldNameがNULLではありません。

#delete)

UPDATE テーブル SET FieldName = REPLACE(FieldName、 ")"、 "")WHERE FieldNameがNULLではありません。

#あなたが欲しい文字を置換するか削除する

#........................

終わり

このようにして、テーブルに対する制御をモジュール化しました。

また、入力パラメータをサニタイズするために、テーブルを使用してストアドプロシージャを一般化することもできます。

4