Як замінити рядок у стовпці таблиці 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/')

Вибачте, що не бути прискіпливим через десять років, але з відповіді незрозуміло, чи fooйого замінюють, чи bar (вибачте ще раз)
Alex

28

Я спробував вище, але це не дало правильного результату. Виконує наступне:

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

11
Це повністю перемагає мета використання методу заміни. Ви можете виконати те саме, що і таке: оновити таблицю set path = 'newstring' where 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" - це тимчасовий стовпець Ім'я, вкладене у "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.