SQL सर्वर तालिका स्तंभ में स्ट्रिंग को कैसे बदलें


364

मेरे पास एक तालिका ( SQL Sever) है जो पथों ( UNCया अन्यथा) का संदर्भ देती है , लेकिन अब पथ बदलने जा रही है।

पथ कॉलम में, मेरे पास कई रिकॉर्ड हैं और मुझे पथ के एक हिस्से को बदलने की आवश्यकता है, लेकिन पूरे पथ को नहीं। और मुझे हर रिकॉर्ड में उसी स्ट्रिंग को नए में बदलने की आवश्यकता है।

मैं एक साधारण के साथ यह कैसे कर सकता हूं update?

जवाबों:


604

यह आसान है:

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

43
where path like '%oldstring%'यदि बहुत अधिक डेटा था, तो मैं आमतौर पर जोड़ूंगा ।
डेरेक टॉम्स

1
जहाँ हालत समझ में आती है क्योंकि अगर मेरे पास तालिका में 50 पंक्तियाँ हैं और अगर मैं 10 पंक्तियों को प्रतिस्थापित कार्य के साथ प्रतिस्थापित कर रहा हूँ तो यह सभी 50 पंक्तियों को प्रभावित करती है, भले ही यह 10 पंक्तियों की जगह लेती हो अगर आपके पास कोई शर्त नहीं है। लेकिन अगर आपके पास उपरोक्त शर्त जैसी कोई शर्त है तो यह केवल 10 पंक्तियों को प्रभावित करती है।
iMalek

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

क्षमा करें, दस साल बाद नाइटपिक नहीं होना चाहिए लेकिन यह जवाब से अस्पष्ट है कि क्या fooबदला जा रहा है या bar (फिर से खेद है)
एलेक्स

28

मैंने उपरोक्त कोशिश की लेकिन इसका सही परिणाम नहीं मिला। निम्नलिखित एक करता है:

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

11
यह पूरी तरह से प्रतिस्थापित विधि का उपयोग करने के उद्देश्य को हरा देता है। आप इस तरह से एक ही चीज़ को पूरा कर सकते हैं: अपडेट टेबल सेट पाथ = 'न्यूस्ट्रिंग' जहां पाथ = 'ओल्डस्ट्रिंग';
इयान

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है।



8

सभी उत्तर महान हैं लेकिन मैं आपको एक अच्छा उदाहरण देना चाहता हूं

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

यह एसक्यूएल स्टेटमेंट दिए गए स्टेटमेंट के अंदर "टेबल" (दूसरा पैरामीटर) शब्द के अस्तित्व को तीसरे पैरामीटर से बदल देगा

प्रारंभिक मूल्य है, 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" टेम्परेरी कॉलम है जिसका नाम "ImagePath" है
"~ /" मेरी करंट स्ट्रिंग है। (पुराना स्ट्रिंग)
"../" मेरा रीक्रिएटेड स्ट्रिंग है। (नया स्ट्रिंग)
"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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.