Jak zamienić ciąg w kolumnie tabeli programu SQL Server

364

Mam tabelę ( SQL Sever), która odwołuje się do ścieżek ( UNClub w inny sposób), ale teraz ścieżka się zmieni.

W kolumnie ścieżki mam wiele rekordów i muszę zmienić tylko część ścieżki, ale nie całą ścieżkę. I muszę zmienić ten sam ciąg na nowy, w każdym rekordzie.

Jak mogę to zrobić za pomocą prostego update?

Iralda Mitro
źródło

Odpowiedzi:

604

To takie proste:

update my_table
set path = replace(path, 'oldstring', 'newstring')
cjk
źródło
43
Zazwyczaj dodawałbym, where path like '%oldstring%'gdyby było dużo danych.
Derek Tomes,
1
gdzie warunek ma sens, ponieważ jeśli mam 50 wierszy w tabeli i jeśli zastępuję 10 wierszy funkcją zamiany, wpływa to na wszystkie 50 wierszy, nawet jeśli zastępuje 10 wierszy, jeśli nie masz warunku gdzie. Ale jeśli masz warunki, o których mowa w powyższym komentarzu, wpływa to tylko na 10 wierszy.
iMalek
132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
Marc Gravell
źródło
przepraszam, nie chcę być nikczemny po dziesięciu latach, ale nie jest jasne, czy odpowiedź foojest zastępowana lub bar (przepraszam ponownie)
Alex
28

Próbowałem powyższego, ale nie przyniosło to prawidłowego wyniku. Następujące działa:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
Cezar
źródło
11
To całkowicie przeczy celowi użycia metody zamiany. Możesz to zrobić w ten sam sposób: update table set path = 'newstring' where path = 'oldstring';
Ian
11
może miałeś na myśli where path like '%oldstring%'?
v010dya
17
UPDATE CustomReports_Ta
SET vchFilter = REPLACE(CAST(vchFilter AS nvarchar(max)), '\\Ingl-report\Templates', 'C:\Customer_Templates')
where CAST(vchFilter AS nvarchar(max)) LIKE '%\\Ingl-report\Templates%'

Bez CASTfunkcji dostałem błąd

Typ danych argumentu ntextjest nieprawidłowy dla argumentu 1 replacefunkcji.

Igor Bakay
źródło
9

Możesz użyć tego zapytania

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'
Nitika Chopra
źródło
8

wszystkie odpowiedzi są świetne, ale chcę dać ci dobry przykład

select replace('this value from table', 'table',  'table but updated')

ta instrukcja SQL zastąpi istnienie słowa „tabela” (drugi parametr) wewnątrz danej instrukcji (pierwszy parametr) trzecim parametrem

wartość początkowa to this value from table ale po wykonaniu funkcji zamiany będziethis value from table but updated

a oto prawdziwy przykład

UPDATE publication
SET doi = replace(doi, '10.7440/perifrasis', '10.25025/perifrasis')
WHERE doi like '10.7440/perifrasis%'

na przykład, jeśli mamy tę wartość

10.7440/perifrasis.2010.1.issue-1

stanie się

10.25025/perifrasis.2010.1.issue-1

mam nadzieję, że daje to lepszą wizualizację

Basheer AL-MOMANI
źródło
6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

gdzie „ImagePath” to nazwa mojej kolumny.
„NewImagePath” to kolumna temporery Nazwa „ImagePath”
„~ /” to mój bieżący ciąg. (Stary ciąg)
„../” to mój wymagany ciąg. (Nowy ciąg)
„tblMyTable” to moja tabela w bazie danych.

Durgesh Pandey
źródło
4

Jeśli typ kolumny docelowej jest inny niż tekst typu varchar / nvarchar , musimy rzutować wartość kolumny jako ciąg znaków, a następnie przekonwertować ją jako:

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'
khichar.anil
źródło
2

musisz zastąpić ścieżkę za pomocą funkcji replace.

update table_name set column_name = replace(column_name, 'oldstring', 'newstring')

tutaj column_name odnosi się do tej kolumny, którą chcesz zmienić.

Mam nadzieję, że to zadziała.


źródło
0

Możesz także zamienić duży tekst na szablon e-maila w czasie wykonywania, oto prosty przykład.

DECLARE @xml NVARCHAR(MAX)
SET @xml = CAST((SELECT [column] AS 'td','',        
        ,[StartDate] AS 'td'
         FROM [table] 
         FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
select REPLACE((EmailTemplate), '[@xml]', @xml) as Newtemplate 
FROM [dbo].[template] where id = 1
Shekhar Patel
źródło