का उपयोग कर स्ट्रिंग में चार से अलग अक्षर बदलें, मेरे पास एक तालिका में NVARCHAR(10)
कॉलम है। यह किसी भी प्रकार के यूनिकोड तारों को स्टोर कर सकता है।एसक्यूएल सर्वर: कोई अस्थायी तालिका
मैं प्रत्येक चार्ट को '0' से '0' से अलग करना चाहता हूं।
मान लें कि मेरे पास स्ट्रिंग 'C18 *' है। मुझे '0100000100' मिलना चाहिए।
मैं जो इस तरह मेरे कॉलम (10), का आकार 1 से अनुक्रमित शामिल एक सहायक तालिका का उपयोग कर यह करने के लिए कामयाब रहे:
CREATE TABLE HELP(Idx INT)
INSERT INTO HELP
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
DECLARE @myStr VARCHAR(10)
SET @myStr = 'C18*'
SELECT STUFF((SELECT '' + CASE(B.Ch) WHEN '1' THEN '1' ELSE '0' END FROM (
SELECT SUBSTRING(A.Val,H.Idx,1) AS Ch
FROM
(SELECT @myStr AS Val) A
CROSS JOIN HELP H
)B FOR XML PATH('')),1,0,'')
यह काम करता है, लेकिन यह एक अच्छा किया जा सकता है मार्ग? यह एक साधारण अपडेट के लिए बदसूरत लगता है, इस तथ्य को अनदेखा कर रहा है कि कॉलम का आकार समय के साथ बदल सकता है। इसे एसक्यूएल> = 2005 पर भी चलाना है।
एसक्यूएल फिडलhere
धन्यवाद!
में परीक्षण किया गया है कि आप केवल एक मानक proc के साथ ऐसा कर सकते हैं या आप नेट प्रक्रिया का उपयोग कर सकते हैं? क्या ऐसा कुछ है जिसे डेटा को साफ़ करने के लिए कई बार चलाने या सिर्फ एक बार चलाने की आवश्यकता है? –
@ मॉरीस रिव्स इसे दर्जनों बड़ी टेबल (10 के + पंक्तियों) के खिलाफ केवल एक बार (हमारे कुछ डेटाबेस में कुछ भ्रष्ट डेटा) चलाना है। एक साधारण कंसोल ऐप इसे हल कर लेगा, लेकिन मैंने पूछा कि एक ही स्थिति फिर से होती है + मुझे उस अस्थायी तालिका पसंद नहीं है। – darkdante
एक संख्या तालिका बहुत उपयोगी है। कई लोगों को एक स्थायी तालिका के रूप में है। –