ปรับปรุงและแทนที่ส่วนหนึ่งของสตริง


427

ฉันมีตารางที่มีสองคอลัมน์IDและValue. ฉันต้องการเปลี่ยนบางส่วนของสตริงในคอลัมน์ที่สอง

ตัวอย่างของตาราง:

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

ตอนนี้ไม่จำเป็น123\ในValueสตริง ฉันพยายามUPDATEแล้วREPLACE:

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

เมื่อฉันเรียกใช้งานสคริปต์ SQL Server จะไม่รายงานข้อผิดพลาด แต่จะไม่ปรับปรุงสิ่งใดเลย ทำไมถึงเป็นอย่างนั้น?


8
มันไม่ได้แทนที่สิ่งใดเพราะสัญลักษณ์แทนจะไม่ถือว่าเป็นสัญลักษณ์แทน แต่เป็นตัวอักษร
stuhpa

คำตอบ:


700

คุณไม่ต้องการสัญลักษณ์แทนในREPLACE- เพียงแค่ค้นหาสตริงที่คุณป้อนสำหรับอาร์กิวเมนต์ที่สองดังนั้นสิ่งต่อไปนี้ควรใช้งานได้:

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

(ฉันยังเพิ่ม\ในการแทนที่ตามที่ฉันคิดว่าคุณไม่จำเป็นต้องใช้อย่างใดอย่างหนึ่ง)


1
มันทำงานตะแกรง แต่ไม่ใช่กับประเภท ntext :( ... >> ข่าวสารเกี่ยวกับ 8116, ระดับ 16, สถานะ 1, บรรทัดที่ 21 - ประเภทข้อมูลอาร์กิวเมนต์ ntext ไม่ถูกต้องสำหรับอาร์กิวเมนต์ 1 ของฟังก์ชั่นแทนที่
Owidat

6
ฉันเพิ่งพบวิธีแก้ปัญหา :) ===> stackoverflow.com/questions/4341613/…
Owidat

2
รอสิ่งที่มี`? isn't that escaping the ตัวละคร '' และทำให้สิ่งนี้ไม่ถูกต้อง?
Meekohi

สิ่งนี้มีประโยชน์
Stanley Okpala Nwosa

สิ่งนี้จะไม่ทำงานหากประเภทคอลัมน์ของคุณเป็นข้อความหรือ NText โปรดดูคำตอบนี้stackoverflow.com/questions/4341613/…
Adil H. Raza


40

ในการทำให้คิวรีทำงานเร็วขึ้นในตารางขนาดใหญ่ที่ไม่จำเป็นต้องอัปเดตทุกบรรทัดคุณสามารถเลือกอัปเดตแถวที่จะแก้ไขเท่านั้น:

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

17

แบบสอบถาม:

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

แบบสอบถามที่สมบูรณ์แบบขอบคุณ
Raju Paladiya

8

คุณมีตารางหนึ่งตารางที่คุณมีรหัสวันที่ซึ่งเป็นอักขระเจ็ดตัวที่คล้ายกัน

"32-1000"

ตอนนี้คุณต้องการแทนที่ทั้งหมด

"32-"

กับ

"14-"

แบบสอบถาม SQL ที่คุณต้องเรียกใช้คือ

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

3

สำหรับทุกคนที่ต้องการแทนที่สคริปต์ของคุณ

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


4
จากคิวการตรวจทาน : ฉันขอให้คุณเพิ่มบริบทรอบ ๆ ซอร์สโค้ดของคุณได้ไหม คำตอบแบบรหัสเท่านั้นยากที่จะเข้าใจ มันจะช่วยผู้ถามและผู้อ่านในอนาคตทั้งสองหากคุณสามารถเพิ่มข้อมูลเพิ่มเติมในโพสต์ของคุณ
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
โปรดอธิบายว่าคำตอบของคุณแก้ปัญหาได้อย่างไรมันจะช่วยให้ทุกคนเข้าใจวิธีแก้ปัญหาของคุณด้วยความชัดเจนมากขึ้นและใช้อ้างอิงในอนาคต
Aziz

1

คุณควรใช้แบบสอบถามอัปเดตด้านล่าง

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

ข้อความค้นหาใดข้อหนึ่งข้างต้นควรใช้ได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.