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?

Odpowiedzi:


604

To takie proste:

update my_table
set path = replace(path, 'oldstring', 'newstring')

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/')

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'

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.


9

Możesz użyć tego zapytania

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

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ę


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.


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'

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.