2013-06-21 18 views
5

Meine 'Standort' Tabelle enthält 6 Spalten. (ID, Name, Alias, Fläche, X, Y)MySQL - Teilstring von einem Eintrag entfernen

Beispiel einiger Einträge aus der Spalte 'Name':

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 

Einige Einträge enthalten "(Berg)", "(Fluss)" oder "(...)" innerhalb des Namens (8 verschiedene). Ich weiß nicht, warum der Tisch so erstellt wurde. Es hätte eine extra Spalte für diese Daten haben sollen, aber gut.

Ich möchte nur die "(...)" Teilstrings von den Standortnamen entfernen. Ich weiß nicht, wie es zu tun, es ist so etwas wie dies Sie eine Idee so erhalten:

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

Ich weiß, das die ganze Zeile löschen würde, aber ich will nur den (%) Begriff aus dem entfernen " Name 'Zeichenfolge.

Antwort

18

Wenn Sie nur 8 Variationen haben, und dies ist eine einmalige Sache, könnten Sie es mit einem Ersatz tun.

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

Genau, es ist nur eine einmalige Sache. Dies funktionierte perfekt für die 8 Variationen. – Mazka

0

statt DELETE, UPDATE tun, so etwas wie:

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

Syntax off ist ein bisschen, denke ich.

2

Sie können dies tun, mit Brute-Force-String-Operationen:

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

Eigentlich Sie dies wollen in einer update Aussage:

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

Sie tun nichtdelete wollen, denn das löscht gesamte Reihen.

0

Ich habe dieses Beispiel für Sie:

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

Auf diese Weise können Sie einen Weg, um Ihre Aufgabe zu erfüllen sehen können.

Verwandte Themen