MySQL文字列置換


560

私はURL(ID、URL)を含む列があります:

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

「更新」という言葉を「ニュース」に変えたいのですが。スクリプトでこれを行うことは可能ですか?


回答:


1285
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

今のような行

http://www.example.com/articles/updates/43

になります

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/


23
簡単な質問ですが、「WHERE」句が本当に必要ですか?
John Crawford

55
@JohnCrawfordリンクの記事によると、「WHERE LIKE検索するテキストがそこにない場合、行は更新されませんが、高速化されるため、必ずしも最後に句を追加する必要はありません。 」
Giraldi 2013

3
WHERE句を使用すると、何を置き換えるかを具体的に制御できます。1つがないと、すべての行がチェックされ、一致が見つかった場合はデータが置き換えられる可能性があります。
Carlton

11
この場合、WHEREはLIKE '%%'インデックスを使用しないため、WHEREは役に立たないと思います。たとえば、そのWHEREに他の部分がある場合、たとえば、date_added > '2014-07-01'それが役に立ったかもしれません
Fabrizio

13
mysqlで何かを置き換える必要があるときは、常に参照のためにここに来ます
Daniel Pecher '13

141

はい、MySQLにはREPLACE()関数があります。

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
    -> 'WwWwWw.mysql.com'

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

使用時にエイリアスを作成すると簡単です。 SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....

OP updatesが文字列に1回だけ出現する限り、これは機能します。そうしないと、MySQLで本当に苦痛な文字列の直接操作に悩まされます。その時点で、フィールドを選択するための1回限りのスクリプトを記述し、クライアントで操作してから書き戻す方が簡単です。
マークB

20

交換する機能があなたのために働く必要があります。

REPLACE(str,from_str,to_str)

文字列from_strをすべて文字列to_strで置き換えた文字列strを返します。REPLACE()from_strを検索するときに、大文字と小文字を区別した一致を実行します。


9

あなたは単にreplace()関数を使うことができます、

where句付き

update tabelName set columnName=REPLACE(columnName,'from','to') where condition;

where句なし

update tabelName set columnName=REPLACE(columnName,'from','to');

注:上記のクエリは、テーブル内のレコードを直接更新する場合で、選択クエリが必要で、データがテーブルで影響を受けないようにする場合は、次のクエリを使用できます。

select REPLACE(columnName,'from','to') as updateRecord;

6

gmaggioの答えに加えて、あなたが動的にする必要がある場合REPLACEと、UPDATEあなたは、たとえば行うことができます別の列によると:

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

私の例では、文字列articles/news/はに格納されてother_table t2おりLIKEWHERE句で使用する必要はありません。

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