Zastąp ciąg T-SQL w aktualizacji

83

Muszę zaktualizować wartości kolumny, zastępując podciąg na istniejących wartościach.

Przykład:

Zawiera dane abc@domain1, pqr@domain2itd.

Muszę zaktualizować wartości takie, które @domain2są zastępowane @domain1.

Sekhar
źródło
Ile adresów e-mail ma każda kolumna? Czy abc @ domain1 i pqr @ domain2 znajdują się w tej samej kolumnie?
dana
tak - są w tej samej kolumnie ..
Sekhar
1
Możliwy duplikat Wyszukaj i zamień część ciągu w bazie danych
Jon Schneider

Odpowiedzi:

152

Składnia REPLACE :

REPLACE (wyrażenie_ciągowe, wzorzec_ciągów, zastąpienie_łańcuchów)

Aby SQL, którego potrzebujesz, był:

UPDATE [DataTable] SET [ColumnValue] = REPLACE([ColumnValue], 'domain2', 'domain1')
Kofi Sarfo
źródło
1
W moim przypadku musiałem zamienić podwójny cudzysłów na pojedynczy cudzysłów. Użyłem następującej REPLACE ([ColumnValue], '"', '' ''). Koniec to cztery pojedyncze cudzysłowy.
Daniel Butler
11

Jeśli kogoś to obchodzi NTEXT, użyj następującego formatu:

SELECT CAST(REPLACE(CAST([ColumnValue] AS NVARCHAR(MAX)),'find','replace') AS NTEXT) 
    FROM [DataTable]
Tawani
źródło
4
To stwierdzenie samo w sobie nie powoduje wykonania aktualizacji. musisz wykonać następujące czynności: UPDATE [DataTable] SET SET [ColumnValue] = CAST (REPLACE (CAST ([ColumnValue] AS NVARCHAR (MAX)), „domain2”, „domain1”) AS NTEXT) FROM [DataTable]
Adam Hej,
6
update YourTable
    set YourColumn = replace(YourColumn, '@domain2', '@domain1')
    where charindex('@domain2', YourColumn) <> 0
Joe Stefanelli
źródło
2
Czy uwzględnienie klauzuli gdzie, jak w tej odpowiedzi, zapewnia jakikolwiek wzrost wydajności w stosunku do zaakceptowanej odpowiedzi?
Jon Schneider