วิธีการแทนที่สตริงในคอลัมน์ตาราง SQL Server


364

ฉันมีตาราง ( SQL Sever) ซึ่งอ้างอิงเส้นทาง ( UNCหรืออย่างอื่น) แต่ตอนนี้เส้นทางกำลังจะเปลี่ยน

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

ฉันจะทำสิ่งนี้ด้วยวิธีง่าย ๆ ได้updateอย่างไร

คำตอบ:


604

มันง่ายมาก:

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

43
ฉันมักจะเพิ่มwhere path like '%oldstring%'ถ้ามีข้อมูลจำนวนมาก
Derek Tomes

1
โดยที่ condition มีเหตุผลเพราะถ้าฉันมีตาราง 50 แถวและถ้าฉันแทนที่ 10 แถวด้วยฟังก์ชั่นแทนที่มันจะส่งผลกระทบต่อทั้ง 50 แถวแม้ว่ามันจะแทนที่ 10 แถวถ้าคุณไม่มีเงื่อนไขที่ แต่ถ้าคุณมีเงื่อนไขเช่นที่กล่าวถึงในความคิดเห็นด้านบนจะมีผลเพียง 10 แถวเท่านั้น
iMalek

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

ขออภัยที่จะไม่เป็น nitpicky หลังจากสิบปี แต่ก็ไม่มีความชัดเจนจากคำตอบถ้าfooจะถูกแทนที่หรือbar (ขออภัยอีกครั้ง)
อเล็กซ์

28

ฉันลองด้านบน แต่ไม่ได้ผลลัพธ์ที่ถูกต้อง หนึ่งต่อไปนี้จะ:

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

11
สิ่งนี้ทำให้เสียจุดประสงค์ในการใช้วิธีการแทนที่ทั้งหมด คุณสามารถทำสิ่งเดียวกันนี้ได้: update table set path = 'newstring' โดยที่ path = 'oldstring';
Ian

11
บางทีคุณอาจหมายถึง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%'

โดยไม่ต้อง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 นี้จะแทนที่การมีอยู่ของคำว่า "table" (พารามิเตอร์ตัวที่สอง) ภายในคำสั่งที่ระบุ (พารามิเตอร์ตัวแรก) ด้วยพารามิเตอร์ตัวที่สาม

ค่าเริ่มต้นคือ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" เป็นคอลัมน์ชั่วคราวชื่อ insted ของ "ImagePath"
"~ /" เป็นสตริงปัจจุบันของฉัน (สตริงเก่า)
"../" เป็นสตริง requried ของฉัน (สตริงใหม่)
"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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.