CẬP NHẬT và thay thế một phần của chuỗi


426

Tôi đã có một bảng có hai cột IDValue. Tôi muốn thay đổi một phần của một số chuỗi trong cột thứ hai.

Ví dụ về Bảng:

ID            Value
---------------------------------
1             c:\temp\123\abc\111
2             c:\temp\123\abc\222
3             c:\temp\123\abc\333
4             c:\temp\123\abc\444

Bây giờ 123\trong Valuechuỗi là không cần thiết. Tôi đã thử UPDATEREPLACE:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '%123%', '')
WHERE ID <= 4

Khi tôi thực thi tập lệnh SQL Server không báo lỗi, nhưng nó cũng không cập nhật bất cứ điều gì. Tại sao vậy?


8
Nó không thay thế bất cứ điều gì vì các ký tự đại diện không được coi là ký tự đại diện mà là chữ.
stuhpa

Câu trả lời:


699

Bạn không cần ký tự đại diện trong REPLACE- nó chỉ tìm chuỗi bạn nhập cho đối số thứ hai, do đó, các thao tác sau sẽ hoạt động:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123\', '')
WHERE ID <=4

(Tôi cũng đã thêm phần \thay thế vì tôi cho rằng bạn cũng không cần điều đó)


1
Nó hoạt động rất tốt, nhưng không phải với loại ntext :( ... >> Msg 8116, Cấp 16, Trạng thái 1, Dòng 21 - Kiểu dữ liệu đối số ntext không hợp lệ cho đối số 1 của chức năng thay thế.
Owidat

6
Tôi vừa tìm thấy giải pháp :) ===> stackoverflow.com/questions/4341613/ cấp
Owidat

2
Đợi đã, cái gì với `? isn't that escaping the ký tự '`và làm cho cái này không chính xác?
Meekohi

Điều này rất hữu ích
Stanley Okpala Nwosa

Điều này sẽ không hoạt động nếu loại Cột của bạn là Văn bản hoặc NText, hãy xem câu trả lời này stackoverflow.com/questions/4341613/
Adil H. Raza

55

Cố gắng xóa %ký tự như dưới đây

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4

40

Để làm cho truy vấn chạy nhanh hơn trong các bảng lớn, nơi không phải mọi dòng cần được cập nhật, bạn cũng có thể chọn chỉ cập nhật các hàng sẽ được sửa đổi:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'

16

truy vấn:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');

truy vấn hoàn hảo Cảm ơn bạn
Raju Paladiya

8

Bạn có một bảng trong đó bạn có Mã ngày có bảy ký tự giống như

"32-1000"

Bây giờ bạn muốn thay thế tất cả

"32-"

Với

"14-"

Truy vấn SQL bạn phải chạy là

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)

3

Đối với bất cứ ai muốn thay thế kịch bản của bạn.

update dbo.[TABLE_NAME] set COLUMN_NAME= replace(COLUMN_NAME, 'old_value', 'new_value') where COLUMN_NAME like %CONDITION%


4
Từ hàng đợi xem xét : Tôi có thể yêu cầu bạn vui lòng thêm một số ngữ cảnh xung quanh mã nguồn của bạn. Câu trả lời chỉ có mã là khó hiểu. Nó sẽ giúp người hỏi và người đọc tương lai cả nếu bạn có thể thêm thông tin trong bài viết của mình.
RBT

1
CREATE TABLE tbl_PersonalDetail
(ID INT IDENTITY ,[Date] nvarchar(20), Name nvarchar(20), GenderID int);

INSERT INTO Tbl_PersonalDetail VALUES(N'18-4-2015', N'Monay', 2),
                                     (N'31-3-2015', N'Monay', 2),
                                     (N'28-12-2015', N'Monay', 2),
                                     (N'19-4-2015', N'Monay', 2)

DECLARE @Date Nvarchar(200)

SET @Date = (SELECT [Date] FROM Tbl_PersonalDetail WHERE ID = 2)

Update Tbl_PersonalDetail SET [Date] = (REPLACE(@Date , '-','/')) WHERE ID = 2 

1
Vui lòng giải thích cách câu trả lời của bạn giải quyết vấn đề, nó sẽ giúp mọi người hiểu giải pháp của bạn rõ ràng hơn và để tham khảo trong tương lai.
Aziz

1

bạn nên sử dụng truy vấn cập nhật dưới đây

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id IN(1, 2, 3, 4)

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id <= 4

Một trong những truy vấn trên nên hoạt động.


0

thay thế cho từ Ba Tư

UPDATE dbo.TblNews
SET keyWords = REPLACE(keyWords, '-', N'،')

trợ giúp: dbo.TblNews - tên bảng

từ khóa - tên khó hiểu

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.