2013-06-21 16 views
5

My 'Location'テーブルには6つのカラムがあります。 (ID、名前、別名、エリア、X、Y) '名前' 列からいくつかのエントリのMySQL - エントリから部分文字列を削除する

例:

Blackwood Highschool, Paris, France 

Hilltop Market, Barcelona, Spain 

Roundwell Plaza, Melbourne, Australia 

Rurk Mount, Moscow, Russia(mountain) 

History Museum, Prague, Czech Republic 

Narrow River (river), Bombay, India 

いくつかのエントリには、 "(山)"、 "(川)" または名前の中の "(...)"(8種類のもの)。私はなぜこのテーブルがこのように作られたのか分かりません。このデータには余分な列があるはずですが、うまくいきました。

ロケーション名から「(...)」部分文字列だけを削除します。

DELETE FROM 'Location' 
WHERE 'Name' 
LIKE '%(%)%'; 

私は、これは全体の行を削除するだろうけど、私は単に 'から(%)用語を削除する:あなたがアイデアを得るので、私はそれがこのようなものだ、それを行う方法がわかりません名前 '文字列。

UPDATE Location 
SET Name = LEFT(Name,LOCATE('(',Name)-1) 
WHERE LOCATE('(',Name) > 0 

構文がオフのビット、私は思う:代わりに、DELETEの

答えて

18

バリエーションが8つしかなく、これは1回限りのものであれば、交換することができます。

update location 
    set name = replace(name , '(river)','') 
    where name like '%(river)%'; 
+0

正確には、それはただのものです。これは8つのバリエーションで完璧に機能しました。 – Mazka

0

は、UPDATE、ような何かを行います。

2

あなたはブルートフォース文字列操作でこれを行うことができます。

select concat(left(name, instr(name, '(') - 1), 
       right(name, length(name) - instr(val, ')')) 
      ) 

実は、あなたがupdate声明でこれをしたい:それは全体が削除されるため

update location 
    set name = concat(left(name, instr(name, '(') - 1), 
         right(name, length(name) - instr(val, ')')) 
        ) 
    where name like '%(%)%'; 

あなたはないdeleteをしたいですか行。

0

私はあなたのために、この例を作った:

set @name = "Rurk Mount, Moscow, Russia(mountain)"; 

set @fir = locate("(",@name); 
set @las = locate(")",@name); 

set @lef = left(@name,@fir-1); 

set @word = substr(@name,@fir+1,@[email protected]); 

select @fir,@las,@lef,@word,concat(@lef,' ',@word); 

この方法では、あなたのタスクを達成するための方法を見ることができます。

関連する問題