2014-11-26 15 views
5

Mam kilka wierszy w testowej bazie danych, w której dolne znaki są poprzedzone wartością. Chcę UPDATE wartości w name wierszu tabeli test1 jednak kiedy rzuciłem następujące zapytanie razem to opróżniane sześć wierszy danych w kolumnie name ...Aktualizacja podłańcuchów PostgreSQL UPDATE

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

So „$ user” stał się " "kiedy zamierzałem, aby wartość kolumny/wiersza stała się" użytkownikiem ".

Jak połączyć AKTUALIZACJĘ z wymianą nośników bez usuwania żadnych innych danych?

Jeśli nie ma znaku dolara, chcę, aby rząd pozostał nienaruszony.

Znak dolara występuje tylko jako pierwszy znak, gdy się pojawi.

+1

'name = replace (imię, '$', '')' –

+0

@a_horse_with_no_name Dziękuję, że działa. Zbyt mało reputacji, by głosować niestety, choć jestem ciekawa, jak to zrobić, jeśli znak dolara jest tylko pierwszą postacią? Próbowałem tego i zastąpił znaki dolara, niezależnie od pozycji. Próbowałem 'UPDATE test1 SET name = replace (name, '$', '', od 1 for 1);' bez powodzenia; jeśli zechcesz opublikować to jako odpowiedź, chętnie go zaakceptuję. –

Odpowiedz

12

Jeśli chcesz zastąpić wszystkie znaki dolara, użyj tego:

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

Jeśli chcesz wymienić $ tylko na początku wartości można wykorzystać substr() i where klauzuli aby zmienić tylko te wiersze gdzie kolumna rzeczywiście zaczyna się $

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

To było interesujące, nie myślałem o używaniu 'substr', zgaduję, że nie można połączyć' replace' z 'FROM'? –

+0

@ user312854: brak pomysłu. Nigdy nie przyzwyczaiłem się do tej formy funkcji 'replace()'. Dla bardziej złożonych zadań zastępczych zwykle używam 'regexp_replace()' –

+0

Nie mogę wymyślić żadnych instancji, przynajmniej z drugiej ręki, w których musiałbym konsekwentnie zastępować postać w określonym punkcie między pierwszą a ostatnią postacią, chociaż wyobrażam sobie że 'replace' i' FROM' będą bardziej wydajne niż użycie wyrażenia regularnego? Jestem dość dobry w regex, ale unikaj go, chyba że naprawdę muszę ograniczyć obciążenie serwera. –

Powiązane problemy