2009-03-03 24 views
62

Tôi cần thay thế tất cả các thẻ iframe, được lưu trữ dưới dạng nvarchar trong cơ sở dữ liệu của tôi. Tôi có thể tìm các mục bằng cách sử dụng sql-câu dưới đây:Tìm kiếm và thay thế một phần chuỗi trong cơ sở dữ liệu

SELECT * FROM databasename..VersionedFields WHERE Value LIKE '%<iframe%' 

Nói rằng tôi muốn thay thế các đoạn mã sau:

code before iframe <iframe src="yadayada"> </iframe> code after iframe 

Với điều này:

code before iframe <a>iframe src="yadayada"</a> code after iframe 

Trả lời

82

Tôi nghĩ rằng 2 cuộc gọi cập nhật nên làm

update VersionedFields 
set Value = replace(value,'<iframe','<a><iframe') 

update VersionedFields 
set Value = replace(value,'> </iframe>','</a>') 
+0

Chỉ cần một lưu ý, ở đó dường như là một ký tự cú pháp bị thiếu. Nên là: 'Giá trị được đặt = thay thế (giá trị, '

+0

cảm ơn @JRadtheBad - cập nhật ngay – kristof

0

tôi sẽ xem xét bằng văn bản một hàm thay thế CLR với sự hỗ trợ RegEx cho loại thao tác chuỗi này.

95

Bạn có thể làm điều đó với một câu lệnh UPDATE thiết lập các giá trị với một REPLACE

UPDATE 
    Table 
SET 
    Column = Replace(Column, 'find value', 'replacement value') 
WHERE 
    xxx 

Bạn sẽ muốn trở thành cực kỳ cẩn thận khi làm điều này! Tôi khuyên bạn nên thực hiện một bản sao lưu trước.

+0

[Đây] (http://www.mydigitallife.info/how-to-find-and-replace- text-in-mysql-database-using-sql /) có thêm thông tin về nó –

+0

Đối với các kiểu dữ liệu 'text' hoặc 'ntext' xem: http://stackoverflow.com/a/4341677/2049986 –

13
update VersionedFields 
set Value = replace(replace(value,'<iframe','<a>iframe'), '> </iframe>','</a>') 

và bạn làm điều đó chỉ trong một lần.

4

Tôi vừa gặp phải sự cố tương tự. Tôi đã xuất nội dung của db thành một tệp sql và sử dụng TextEdit để tìm và thay thế mọi thứ tôi cần. Đơn giản ftw!

+0

Bạn là người thông minh nhất ở đây tôi sẽ làm điều này: D – ucefkh

-1

cơ sở dữ liệu cập nhật và Set fieldName = Replace (fieldName, 'FindString', 'ReplaceString')

Các vấn đề liên quan