2009-02-02 2 views
12

में एकाधिक स्ट्रिंग्स को बदलें मैं SQL सर्वर में एक SQL क्वेरी लिख रहा हूं जिसमें मुझे एक स्ट्रिंग मान के साथ एकाधिक स्ट्रिंग मानों को प्रतिस्थापित करने की आवश्यकता है। उदाहरणएसक्यूएल क्वेरी

लिए
Product  Quantity 
-------  -------- 
Apple  2 
Orange  3 
Banana  1 
Vegetable 7 
Dairy  6 

बन जाएगा

Product  Quantity 
-------  -------- 
Fruit  2 
Fruit  3 
Fruit  1 
Vegetable 7 
Dairy  6 

एक ही रास्ता मैं ऐसा करने के तरीके जानते हैं कि एक नेस्ट SELECT खंड में REPLACE उपयोग करने के लिए है।

SELECT 
    REPLACE('Banana', REPLACE('Orange', REPLACE('Banana', Product, 'Fruit'), 
      'Fruit'), 'Fruit') AS Product 
FROM 
    Table 

क्या कोई आसान तरीका है?

संपादित करें: उत्पाद श्रेणी में अन्य मूल्य हो सकते हैं। उपरोक्त संपादित उदाहरण देखें।

उत्तर

20

BradC सर्वश्रेष्ठ उत्तर अब तक है, लेकिन मामले में आप अतिरिक्त तालिका मैं Kibbee के जवाब का एक रूपांतरण पोस्ट करने के लिए चाहता था बनाने में असमर्थ किसी कारण हैं:

SELECT 
    CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit' 
    ELSE Product END 
FROM [Table] 
+0

यह मेरे उद्देश्यों के लिए सबसे अच्छा काम करेगा क्योंकि मैं जिस डेटाबेस से खींच रहा हूं वह एक संग्रह है। अन्यथा एक श्रेणी कॉलम जोड़ने का रास्ता होगा। धन्यवाद! –

+0

वह एक छोटी लुकअप टेबल जोड़ने की बात कर रहा है, और यह एक संग्रह डीबी के लिए भी करना आसान है। –

1

आप का उल्लेख किया उन लोगों की तुलना में कोई अन्य उत्पादों नहीं हैं, तो कर सकता है:

SELECT 'Fruit' AS Product, 
     Quantity 
FROM Table 

अन्य उत्पादों नहीं हैं, तो जूस एक कहां खंड

WHERE Product IN ('Banana', 'Orange', 'Apple') 
7
Select 
Case Product WHEN 'Banana' Then 'Fruit' 
WHEN 'Apple' Then 'Fruit' 
WHEN 'Orange' Then 'Fruit' 
ELSE Product 
END 
FROM Table 
+0

यह उपयोगी है

उदाहरण के लिए इस लिंक की जाँच करें। धन्यवाद। –

11

एक नया "श्रेणी" बनाओ जोड़ने तालिका जिसमें आपके उत्पादों की एक सूची है, साथ ही साथ "श्रेणी" के साथ वे संबंधित हैं।

फिर बस एक आंतरिक शामिल हों।

+0

पहली बात मैंने सोचा था। – dotjoe

+2

+1 इसे करने का यह तरीका है – SQLMenace

+0

यह एक अच्छा समाधान होगा सिवाय इसके कि मैं केवल पढ़ने-योग्य संग्रह से खींच रहा हूं। –

1

आप एक कॉलम 'उत्पाद' कॉलम के साथ एक temp तालिका बना सकते हैं, और उन सभी उत्पाद नामों को सम्मिलित कर सकते हैं जिन्हें आप प्रतिस्थापित करना चाहते हैं।

फिर अपने अपडेट के लिए लक्ष्य तालिका के विरुद्ध एक आंतरिक शामिल हों।

UPDATE 
    Table 
SET Product = 'Fruit' 
FROM 
    Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product 
0

एकल उद्धरण चिह्न एसक्यूएल में पाठ परिसीमित करने के लिए:

CASE WHEN ShiptoPlant IN (';','/',' ') Then '' ELSE ShipToPlant END