web-dev-qa-db-ja.com

MySQLは複数の文字を置き換えることができますか?

MySQLフィールドの文字列を置き換えようとしています。 REPLACE関数は知っていますが、一度に1つの文字列のみを置き換えます。適切な機能が表示されません マニュアル内

複数の文字列を一度に置換または削除できますか?たとえば、スペースをダッシュ​​に置き換え、他の句読点を削除する必要があります。

49
DisgruntledGoat

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

読者のための演習として、一般的な表式を使用した翻訳を残します;)

66
Andomar

カスケードは、複数の文字を置換するためのmysqlに対する唯一のシンプルで簡単なソリューションです。

UPDATE table1 
SET column1 = replace(replace(REPLACE(column1, '\r\n', ''), '<br />',''), '<\r>','')
8
Anurag

私はこれに lib_mysqludf_preg を使用してきました。

MySQLでPCRE正規表現を直接使用する

このライブラリをインストールすると、次のようなことができます。

SELECT preg_replace('/(\\.|com|www)/','','www.example.com');

それはあなたに与えるでしょう:

example
4
billynoah

REPLACE は、文字列内のすべての場所で文字やフレーズを置き換えるという非常に簡単な仕事をします。ただし、句読点をクレンジングするときは、パターンを探す必要があります。テキストの特定の部分にある一連の空白または文字。 Wordの途中または完全に停止した後。その場合は、正規表現の置換関数がはるかに強力になります。悪いニュースは MySQLはそのようなことを提供していません ですが、良いニュースは回避策を提供できることです- このブログ投稿 を参照してください。

複数の文字列を一度に置換または削除できますか?たとえば、スペースをダッシュ​​に置き換え、他の句読点を削除する必要があります。

上記は、正規表現の置き換えと標準のREPLACE関数の組み合わせで実現できます。 このオンラインRextesterデモ で実際に見ることができます。

SQL(簡潔にするために機能コードを除く)

SELECT txt,
       reg_replace(REPLACE(txt, ' ', '-'),
                   '[^a-zA-Z0-9-]+',
                   '',
                   TRUE,
                   0,
                   0
                   ) AS `reg_replaced`
FROM test;
1
Steve Chambers

pHP

$dataToReplace = [1 => 'one', 2 => 'two', 3 => 'three'];
$sqlReplace = '';
foreach ($dataToReplace as $key => $val) {
    $sqlReplace = 'REPLACE(' . ($sqlReplace ? $sqlReplace : 'replace_field') . ', "' . $key . '", "' . $val . '")';
}
echo $sqlReplace;

結果

REPLACE(
    REPLACE(
        REPLACE(replace_field, "1", "one"),
    "2", "two"),
"3", "three");
1
asdasd