2016-04-18 12 views
0

私はここでcaseというステートメントで自己結合クエリを使用しています。私のクエリは、データベースから完全に完全な単語にマッチするように動作しなければなりません単語内の単語に一致する必要があります。私はそれがその文字列と更新データベースからその単語を削除する必要があり、正確な単語の一致を検出した後にMysqlのクエリが正確な単語と一致し、データベースからその正確な単語を削除します

。私が一致する場合

それは、正確な単語を一致させることができますが、問題はそれが単語内の単語を更新しています。私の質問をここで見てください。

update table1 a 
left join table1 b on 
    (a.id = b.id) 
SET a.column = CASE 
     WHEN b.column2 IS NOT NULL THEN REPLACE(a.column, 'ich', '') 
     END  
     where (a.column REGEXP '[[:<:]]ich[[:>:]]') 

元の文字列(カラム):クエリ出力文字列(列)上記

ich fühlte mich beobachtet, konnte nicht in ruhe auswählen 

fühlte m beobachtet,  nt  ruhe auswählen 

出力(列)を来なければならない:

fühlte mich beobachtet, konnte nicht in ruhe auswählen 

解答をお勧めします。「ich」という単語は、1つの単語全体と一致するだけで、単語内の単語は削除されているため、削除する必要があります。

+0

REPLACE(concat( ''、a.column、 '')、 'ich'、 '') 'を試してください。 –

+0

チェックこのリンク:http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql –

+0

@おかげWiktorStribiżewその –

答えて

0

'ich' to ''は正確な単語ではありませんので、完全な文字列の中で文字シーケンスを取っています。単語を正確にしたい場合は、正確な単語をスペースlike ' ich 'で管理できます。

変更したクエリは、

オプション1

update table1 a 
left join table1 b on 
    (a.id = b.id) 
SET a.column = CASE 
     WHEN b.column2 IS NOT NULL THEN REPLACE(a.column, ' ich ', ' ') 
     END  
     where (a.column REGEXP '[[:<:]]ich[[:>:]]') 

オプション2になります:あなたがここにあなたが欲しい、その単語の前または後にスペースを追加することができ、また、concat関数を使用することができます検索する。

update table1 a 
    left join table1 b on 
     (a.id = b.id) 
    SET a.column = CASE 
      WHEN b.column2 IS NOT NULL THEN REPLACE(concat(' ', a.column, ' '), ' ich ', ' ') 
      END  
      where (a.column REGEXP '[[:<:]]ich[[:>:]]') 

注:私はあなたが偽のスペースを防ぐために、オプション2を使用することをお勧めします。

0

はあなたがエントリにし、単語全体として交換する必要がある単語に偽のスペースを追加することができ、

REPLACE(concat(' ', a.column, ' '), ' ich ', ' ') 

事があるとその制限を回避することがあります。 100%の解決策ではありませんが、ほとんどの場合問題なく動作します。

関連する問題