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
読者のための演習として、一般的な表式を使用した翻訳を残します;)
カスケードは、複数の文字を置換するためのmysqlに対する唯一のシンプルで簡単なソリューションです。
UPDATE table1
SET column1 = replace(replace(REPLACE(column1, '\r\n', ''), '<br />',''), '<\r>','')
私はこれに lib_mysqludf_preg を使用してきました。
MySQLでPCRE正規表現を直接使用する
このライブラリをインストールすると、次のようなことができます。
SELECT preg_replace('/(\\.|com|www)/','','www.example.com');
それはあなたに与えるでしょう:
example
REPLACE
は、文字列内のすべての場所で文字やフレーズを置き換えるという非常に簡単な仕事をします。ただし、句読点をクレンジングするときは、パターンを探す必要があります。テキストの特定の部分にある一連の空白または文字。 Wordの途中または完全に停止した後。その場合は、正規表現の置換関数がはるかに強力になります。悪いニュースは MySQLはそのようなことを提供していません ですが、良いニュースは回避策を提供できることです- このブログ投稿 を参照してください。
複数の文字列を一度に置換または削除できますか?たとえば、スペースをダッシュに置き換え、他の句読点を削除する必要があります。
上記は、正規表現の置き換えと標準のREPLACE
関数の組み合わせで実現できます。 このオンラインRextesterデモ で実際に見ることができます。
SQL(簡潔にするために機能コードを除く):
SELECT txt,
reg_replace(REPLACE(txt, ' ', '-'),
'[^a-zA-Z0-9-]+',
'',
TRUE,
0,
0
) AS `reg_replaced`
FROM test;
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");