Cách thay thế một chuỗi trong Cột Bảng SQL Server


364

Tôi có một bảng ( SQL Sever) tham chiếu các đường dẫn ( UNChoặc cách khác), nhưng bây giờ đường dẫn sẽ thay đổi.

Trong cột đường dẫn, tôi có nhiều bản ghi và tôi cần thay đổi chỉ một phần của đường dẫn, nhưng không phải toàn bộ đường dẫn. Và tôi cần thay đổi cùng một chuỗi thành chuỗi mới, trong mỗi bản ghi.

Làm thế nào tôi có thể làm điều này với một đơn giản update?

Câu trả lời:


604

Thật dễ dàng:

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

43
Tôi thường thêm where path like '%oldstring%'nếu có nhiều dữ liệu.
Derek Tomes

1
điều kiện có ý nghĩa bởi vì nếu tôi có 50 hàng trong bảng và nếu tôi thay thế 10 hàng bằng chức năng thay thế thì nó sẽ ảnh hưởng đến tất cả 50 hàng, mặc dù nó thay thế 10 hàng nếu bạn không có điều kiện. Nhưng nếu bạn có điều kiện như đã đề cập ở trên, nó chỉ ảnh hưởng đến 10 hàng.
iMalek

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

1
xin lỗi, không phải là nitpicky sau mười năm nhưng không rõ câu trả lời nếu foođược thay thế hoặc bar (xin lỗi lần nữa)
Alex

28

Tôi đã thử ở trên nhưng không mang lại kết quả chính xác. Một trong những điều sau đây:

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

11
Điều này hoàn toàn đánh bại mục đích sử dụng phương pháp thay thế. Bạn có thể thực hiện điều tương tự như thế này: bảng cập nhật thiết lập đường dẫn = 'chuỗi mới' trong đó path = 'chuỗi cũ';
Ian

11
có lẽ bạn có ý nghĩa where path like '%oldstring%'?
v010dya

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

Không có CASTchức năng, tôi gặp lỗi

Kiểu dữ liệu ntextđối số không hợp lệ cho đối số 1 của replacehàm.


9

Bạn có thể sử dụng truy vấn này

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

8

tất cả các câu trả lời đều tuyệt vời nhưng tôi chỉ muốn cho bạn một ví dụ tốt

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

câu lệnh SQL này sẽ thay thế sự tồn tại của từ "bảng" (tham số thứ hai) bên trong câu lệnh đã cho (tham số đầu tiên) bằng tham số thứ ba

giá trị ban đầu là this value from tablenhưng sau khi thực hiện chức năng thay thế, nó sẽ làthis value from table but updated

và đây là một ví dụ thực tế

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

ví dụ nếu chúng ta có giá trị này

10.7440/perifrasis.2010.1.issue-1

nó sẽ trở thành

10.25025/perifrasis.2010.1.issue-1

hy vọng điều này mang lại cho bạn hình dung tốt hơn


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

trong đó "ImagePath" là Tên cột của tôi.
"NewImagePath" là cột tạm thời Tên của "ImagePath"
"~ /" là chuỗi hiện tại của tôi. (Chuỗi cũ)
"../" là chuỗi yêu cầu của tôi. (Chuỗi mới)
"tblMyTable" là bảng của tôi trong cơ sở dữ liệu.


4

Nếu loại cột mục tiêu không phải là varchar / nvarchar như văn bản , chúng ta cần truyền giá trị cột dưới dạng chuỗi và sau đó chuyển đổi nó thành:

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

2

bạn cần thay thế đường dẫn với sự trợ giúp của chức năng thay thế.

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

ở đây column_nameđề cập đến cột mà bạn muốn thay đổi.

Hy vọng nó sẽ làm việc.


0

Bạn cũng có thể thay thế văn bản lớn cho mẫu email trong thời gian chạy, đây là một ví dụ đơn giản cho điều đó.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.