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」に変更したいです。スクリプトでこれを行うことは可能ですか?
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
はい、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....
replace 関数はあなたのために働くはずです。
REPLACE(str,from_str,to_str)
文字列from_strのすべての出現箇所を文字列to_strで置き換えた文字列strを返します。 from_strを検索するとき、REPLACE()
は大文字と小文字を区別した一致を実行します。
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
に格納されており、LIKE
節でWHERE
を使用する必要はありません。
あなたは単に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;