1列にいくつかの悪いデータを含む多数のレコードがあるデータベースがあります。そこでは、埋め込まれたエディタが、エスケープされるべきではないものをエスケープし、生成されたリンクを壊しています。
すべてのレコードの不正な文字を置き換えるためにクエリを実行したいのですが、その方法がわかりません。 MySQLに replace()
関数 が見つかりましたが、クエリ内でどのように使用できますか?
たとえば、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
UPDATE some_table SET some_field = REPLACE(some_field, '<', '<')
これをチェックして
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')
あなたはこのようなストアドプロシージャを書くことができます:
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ではありません。
#あなたが欲しい文字を置換するか削除する
#........................
終わり
このようにして、テーブルに対する制御をモジュール化しました。
また、入力パラメータをサニタイズするために、テーブルを使用してストアドプロシージャを一般化することもできます。