Как заменить строку в столбце таблицы SQL Server - PullRequest
345 голосов
/ 02 мая 2009

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

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

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

Ответы [ 10 ]

569 голосов
/ 02 мая 2009

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

update my_table
set path = replace(path, 'oldstring', 'newstring')
127 голосов
/ 02 мая 2009
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
25 голосов
/ 02 марта 2012

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

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
17 голосов
/ 09 декабря 2012
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 голосов
/ 27 апреля 2017

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

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'
7 голосов
/ 24 июля 2017

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

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 голосов
/ 30 марта 2016
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

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

4 голосов
/ 21 июля 2015

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

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'
2 голосов
/ 10 мая 2019

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

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

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

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

0 голосов
/ 29 марта 2017

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

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
...