2009-05-02 4 views
300

У меня есть таблица (SQL Sever), которая ссылается на пути (UNC или иначе), но теперь путь изменится. В столбце пути у меня много записей, и мне нужно изменить только часть пути, но не весь путь. И мне нужно изменить одну и ту же строку на новую, в каждой записи.Как заменить строку в таблице SQL Server Столбец

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

ответ

483

Это так легко:

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

Обычно я добавлял 'where path like '% oldstring%'', если было много данных. –

+0

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

108
UPDATE [table] 
SET [column] = REPLACE([column], '/foo/', '/bar/') 
+8

Charm! Работает как старый велосипед rustik с миллионом галлонов газа и открытой трассы! – Skynet

24

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

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

Это полностью нарушает цель использования метода замены. Вы можете выполнить одно и то же: таблица обновлений set path = 'newstring' где path = 'oldstring'; – Ian

+8

Возможно, вы имели в виду 'where path like '% oldstring%''? – v010dya

15
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 функции.

3

Если целевой тип столбца, кроме VARCHAR/NVARCHAR как текст, мы должны привести значение столбца в виде строки, а затем преобразовать его в:

update URL_TABLE 
set Parameters = REPLACE (cast(Parameters as varchar(max)), 'india', 'bharat') 
where URL_ID='150721_013359670' 
3
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

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

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 
4

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

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

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

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 

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

Смежные вопросы