mySQL replace()を使用して複数のレコードの文字列を置き換えるにはどうすればよいですか?


166

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

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

私は文字列を置換したい場合たとえば、何が正しい構文になり&lt;、実際より少なくよりアングルブラケット(と<持っているすべてのレコードで)&lt;articleItem、カラム?単一のクエリで実行できますか(つまり、すべてを一度に選択して置き換える)、または複数のクエリを実行する必要がありますか?複数のクエリであっても、複数のreplace()レコードのフィールドの値を置き換えるにはどうすればよいですか?


5
何かを行う前に、データベースもバックアップしてください。また、updateを使用してフィールドを更新します。
マット


回答:


395

非常に一般的なレベルで

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


7
マイナーなクイズ:GREATERTHANは '>'です
Olivier Dulac

23
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

&lt;sを修正しました。次のように&のエンコーディングを使用する必要があります:&amp;:)
Dan J

再編集しました。知らせてくれてありがとうございます。どうすればいいのかわからないと言った瞬間、私は夜明けを迎えました。それが私の世界の仕組みです。:)
simshaun 2010年

6

これをチェックして

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')

4

次のようなストアドプロシージャを記述できます。

CREATE PROCEDURE sanitize_ 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ではありません。

#必要な文字を配置または削除する

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

終わり

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

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


1
これらのnullチェックは冗長です
kiedysktos 2017年

mysqlストアドプロシージャを作成するための簡単で安全なツールはありますか?
Ivan Slaughter 2017年

0

これはあなたを助けます。

UPDATE play_school_data SET title= REPLACE(title, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

結果:

title = Elmer's Parade
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.