2014-11-26 19 views
5

Ich habe ein paar Zeilen in einer Test-Datenbank, wo Dollar-Zeichen mit dem Wert vorangestellt sind. Ich möchte jedoch die Werte in der name Zeile der test1 Tabelle UPDATE, wenn ich die folgende Abfrage zusammen warf er die sechs Reihen von Daten in der name Spalte geleert ...PostgreSQL UPDATE Substring Ersetzung

UPDATE test1 SET name=overlay('$' placing '' from 1 for 1); 

So „$ user“ wurde " "Wenn ich für diesen Spalten-/Zeilenwert beabsichtigte," Benutzer "zu werden.

Wie kombiniere ich UPDATE und einen Substr-Ersatz ohne die anderen Daten zu löschen?

Wenn es kein Dollarzeichen gibt, möchte ich, dass die Zeile unberührt bleibt.

Das Dollarzeichen tritt nur als das erste Zeichen auf, wenn es auftritt.

+1

'name = ersetzen (Name, '$', '')' –

+0

@a_horse_with_no_name Danke, das funktioniert. Leider nicht genug Reputation, um zu stimmen, obwohl ich neugierig bin, wie das geht, wenn das Dollarzeichen nur das erste Zeichen ist? Ich habe es versucht und es ersetzt Dollarzeichen unabhängig von der Position. Ich habe versucht 'UPDATE test1 SET name = ersetzen (name,' $ ',' ', von 1 für 1); 'ohne Erfolg; Wenn Sie es bitte als Antwort posten, nehme ich es gerne an. –

Antwort

12

Wenn Sie alle Dollar-Zeichen ersetzen möchten, verwenden Sie diese:

update test1 
    set name = replace(name, '$', ''); 

Wenn Sie die $ erst am Anfang des Wertes ersetzen möchten Sie verwenden können substr() und einer where Klausel nur die Zeilen ändern wo die Spalte beginnt eigentlich mit einem $

update test1 
    set name = substr(name, 2) 
where name like '$%'; 
+0

Das war interessant, ich hatte nicht daran gedacht 'substr' zu verwenden, ich vermute, dass es nicht möglich ist,' replace' mit 'FROM' zu kombinieren, dann? –

+0

@ user312854: keine Ahnung. Ich habe mich nie an diese Form der Funktion 'replace()' gewöhnt. Für komplexere Ersetzungsaufgaben verwende ich normalerweise 'regexp_replace()' –

+0

Ich kann mir keine Instanzen vorstellen, zumindest nicht, wo ich ein Zeichen an einem bestimmten Punkt zwischen den ersten und letzten Zeichen ersetzen müsste, obwohl ich mir das vorstelle "Ersetzen" und "FROM" wäre effizienter als die Verwendung eines regulären Ausdrucks? Ich bin ziemlich gut in Regex, aber vermeide es, es sei denn, ich muss die Serverlast wirklich reduzieren. –