MySQLはフィールドの一部のテキストを検索して置換します


257

どのMySQLクエリがテキスト検索を実行し、テーブルの特定のフィールドで置き換えますか?

すなわちを検索fooし、と交換しbarた値を持つフィールドを持つレコードがようhello fooになりhello bar

回答:


490

問題のテーブル名とフィールドに合わせて変更table_namefieldます。

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;

79
UPDATE [テーブル名] SET [フィールド名] = REPLACE([field_name]、 "foo"、 "bar");
Meetai.com 2013

6
使用しない方が速いと思いますWHERE instr(field, 'foo') > 0;(2つの検索を実行しないため)...
inemanja 2013年

2
@ treddell、SQL文字列の1から始まる位置はありません。
Alexis Wilke 2015年

2
@ inemanja、@ Air、WHERE節なしUPDATEですべての行で...
Alexis Wilke

7
Pringのように、そのようなコメントを残す場合は、その理由を説明する必要があります。元のアドバイスの誤りですか、それともあなた側の誤りですか?また、データベースに大幅な変更を加える前に、まずデータベースをバックアップする必要があることを知っていますか?
pdwalker 2017年

86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

2
助けて頂きました。すべてのノブについて、角かっこを削除してください。
Anantha Raju C 2017

8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

たとえば、Johnのすべての出現箇所をMarkで置き換えたい場合は、以下を使用します。

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

6

また、別のフィールドの値に基づいて検索および置換したい場合は、CONCATを実行できます。

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

これをここに置いて、他の人がすぐに見つけられるようにします。



4

私の経験では、最速の方法は

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

INSTR()方法は、最速秒と省略されているWHERE完全句は、列が索引付けされていない場合でも、最も遅いです。


別の句をどこに追加する必要があるので、私にとっては機能します。UPDATE table_name SET field = REPLACE(field、 'foo'、 'bar')WHERE field LIKE '%foo%' AND otherfield = 'foo22'
Max

1

文字列の置換関数がそれを行います。


私のために働く。それはあなたが質問をどう解釈するかによります。データベースエントリを変更する必要がある場合は、を使用しますupdate。それ以外の場合、このソリューションはフィールドを更新せずに使用できるため、はるかに優れています。
グルーバー

0

上記のコマンドラインを次のように使用しました。update TABLE-NAME set FIELD = replace(FIELD、 'And'、 'and'); 目的はAndをandに置き換えることでした( "A"は小文字にする必要があります)。問題は、データベースで「And」を見つけることができないことですが、「%And%」のように使用すると、単語の一部である他の多くのandsや、すでに小文字のANDも検索できます。

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