Как заменить строку в столбце таблицы 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'
khichar.anil
источник
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
Шехар Патель
источник