2013-06-21 8 views
5

La mia tabella 'Posizione' contiene 6 colonne. (ID, nome, alias, Area, X, Y)MySQL - Rimuovi sottostringa da una voce

Esempio di alcune voci dalla colonna 'Nome':

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 

Alcune voci sono "(montagna)", "(fiume)" o "(...)" all'interno del nome (8 diversi). Non so perché il tavolo è stato creato in questo modo. Doveva avere una colonna in più per questi dati, ma bene.

Desidero rimuovere solo le sottostringhe "(...)" dai nomi di posizione. Non so come fare, è qualcosa di simile in modo da avere un'idea:

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

So che questo sarebbe cancellare l'intera riga, ma voglio solo per rimuovere il (%) termine dal ' Nome 'stringa.

risposta

18

Se hai solo 8 varianti e questa è una cosa sola, puoi farlo con una sostituzione.

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

Esattamente, è solo una cosa di una volta. Questo ha funzionato perfettamente per le 8 varianti. – Mazka

0

Invece di DELETE, UPDATE fare, qualcosa di simile a:

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

sintassi è spento un po 'che penso.

2

È possibile farlo con le operazioni di stringa forza bruta:

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

In realtà, si desidera che questo in un update dichiarazione:

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

Fate non vogliono delete, perché elimina tutto filari.

0

Ho fatto questo esempio per voi:

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

In questo modo si può vedere un modo per compiere il proprio compito.