Как заменить строку в столбце таблицы SQL Server


364

У меня есть таблица ( SQL Sever), которая ссылается на пути ( UNCили иным образом), но теперь путь будет меняться.

В столбце пути у меня много записей, и мне нужно изменить только часть пути, но не весь путь. И мне нужно изменить одну и ту же строку на новую, в каждой записи.

Как я могу сделать это с простым update?

Ответы:


604

Это так просто:

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

43
Я бы обычно добавил, where path like '%oldstring%'если бы было много данных.
Дерек Томес

1
условие условия имеет смысл, потому что, если у меня в таблице 50 строк, и если я заменяю 10 строк функцией замены, это влияет на все 50 строк, даже если он заменяет 10 строк, если у вас нет условия где. Но если у вас есть такое условие, как упомянуто в комментарии выше, оно влияет только на 10 строк.
iMalek

132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')

1
извините, чтобы не быть придирчивым через десять лет, но из ответа неясно foo, заменяется или bar (извините еще раз)
Алекс

28

Я попытался выше, но это не дало правильный результат. Следующий делает:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'

11
Это полностью отрицает цель использования метода замены. Вы можете сделать то же самое, как это: обновить таблицу set path = 'newstring' где path = 'oldstring';
Ян

11
возможно ты имел ввиду where path like '%oldstring%'?
v010дя

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%'

Без CASTфункции я получил ошибку

Тип данных ntextаргумента недопустим для аргумента 1 replaceфункции.


9

Вы можете использовать этот запрос

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

8

все ответы отличные, но я просто хочу дать вам хороший пример

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

этот оператор SQL заменит существование слова «таблица» (второй параметр) внутри данного оператора (первый параметр) третьим параметром

начальное значение, this value from tableно после выполнения функции замены это будетthis value from table but updated

и вот реальный пример

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

например, если у нас есть это значение

10.7440/perifrasis.2010.1.issue-1

это станет

10.25025/perifrasis.2010.1.issue-1

надеюсь, это даст вам лучшую визуализацию


6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

где «ImagePath» - это имя моего столбца.
«NewImagePath» - это столбец temporery. Имя, указанное в «ImagePath»,
«~ /» - моя текущая строка. (Старая строка)
«../» - моя запрашиваемая строка. (Новая строка)
«tblMyTable» - моя таблица в базе данных.


4

Если тип целевого столбца отличается от типа текста varchar / nvarchar , нам нужно преобразовать значение столбца в строку и затем преобразовать его как:

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'

2

вам нужно заменить путь с помощью функции замены.

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

здесь column_nameотносится к тому столбцу, который вы хотите изменить.

Надеюсь, это сработает.


0

Вы также можете заменить большой текст для шаблона электронной почты во время выполнения, вот простой пример для этого.

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.