2013-06-21 60 views
5

我的「位置」表包含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 '%(%)%'; 

我知道這會刪除整個行,但我只是想從刪除(%)項的'名稱'字符串。

回答

18

如果你只有8個版本,而且這是一次性的事情,你可以使用替換。

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

準確地說,這只是一次性的事情。這對於8個變化完美地工作。 – Mazka

0

相反的DELETE,UPDATE做,是這樣的:

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

語法是斷位,我認爲。

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); 

這樣你可以看到一個方式來完成你的任務。