MySQLのフィールドにある文字を大量に置き換えようとしています。REPLACE関数は知っていますが、一度に1つの文字列を置き換えるだけです。適切な関数はマニュアルに見当たりません。
複数の文字列を一度に置換または削除することはできますか?例えば、スペースをダッシュに置き換え、他の句読点を削除する必要があります。
REPLACE関数を連結することができます。
select replace(replace('hello world','world','earth'),'hello','hi')
これは hi earth
と表示します。
サブクエリを使って、複数の文字列を置き換えることもできます。
select replace(london_english,'hello','hi') as warwickshire_english
from (
select replace('hello world','world','earth') as london_english
) sub
またはJOINを使って置き換えることもできます。
select group_concat(newword separator ' ')
from (
select 'hello' as oldword
union all
select 'world'
) orig
inner join (
select 'hello' as oldword, 'hi' as newword
union all
select 'world', 'earth'
) trans on orig.oldword = trans.oldword
一般的なテーブル表現を使った翻訳は、読者への練習として残しておくことにする;)
REPLACE`は、文字やフレーズが文字列のどこに現れても、それを置き換えるというシンプルで良い仕事をします。例えば、単語の途中やフルストップの後など、テキストの特定の部分に空白や文字が連続するような場合です。そのような場合は、正規表現による置換機能の方がはるかに強力でしょう。悪いニュースは、MySQLはそのような機能を提供していないことですが、良いニュースは、回避策を提供することが可能であることです - このブログ記事を参照してください。
複数の文字列を一度に置換・削除することはできますか?例えば、以下のような場合です。 空白をダッシュに置換し、その他の句読点を削除したい。
上記は、正規表現の置換と標準の REPLACE
関数の組み合わせで実現できます。これはこのオンラインのRextesterデモで実際に見ることができます。
*SQL (簡潔さのために関数コードを除く):.
SELECT txt,
reg_replace(REPLACE(txt, ' ', '-'),
'[^a-zA-Z0-9-]+',
'',
TRUE,
0,
0
) AS `reg_replaced`
FROM test;