web-dev-qa-db-ja.com

MySQL文字列置換

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

Wordの「updates」を「news」に変更したいです。スクリプトでこれを行うことは可能ですか?

519
n00b
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/

1206
Giraldi

はい、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....
137
onteria_

replace 関数はあなたのために働くはずです。

REPLACE(str,from_str,to_str)

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

19
Jay

gmaggioの答えに加えて 他のコラムに従って動的にREPLACEUPDATEにする必要がある場合は、例えば:

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に格納されており、LIKE節でWHEREを使用する必要はありません。

6
RafaSashi

あなたは単に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
Deepak Kumbhar