वहाँ चर के साथ StartsWith या टी sql में शामिल है?


94

मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या सर्वर एक्सप्रेस संस्करण चला रहा है।

मेरे पास निम्नलिखित t sql है।

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar)

print @edition

मेरे उदाहरण में, @edition = Express Edition (64-bit)

मैं निम्नलिखित कैसे कर सकता हूं? (C # प्रेरित)।

DECLARE @isExpress bit;
set @isExpress = @edition.StartsWith('Express Edition');

जवाबों:


122

इसके साथ आरंभ होता है

a) left(@edition, 15) = 'Express Edition'
b) charindex('Express Edition', @edition) = 1

शामिल

charindex('Express Edition', @edition) >= 1

उदाहरण

left समारोह

set @isExpress = case when left(@edition, 15) = 'Express Edition' then 1 else 0 end

iif फ़ंक्शन (SQL सर्वर 2012 से शुरू)

set @isExpress = iif(left(@edition, 15) = 'Express Edition', 1, 0);

charindex समारोह

set @isExpress = iif(charindex('Express Edition', @edition) = 1, 1, 0);

1
ध्यान दें कि आंतरिक रूप से ये अलग-अलग काम करते हैं, विशेष रूप से wrt प्रदर्शन और इसके सूचकांक का उपयोग। उदाहरण के लिए, एक क्वेरी का उपयोग colName LIKE 'prefix%'बहुत तेजी से जब हो जाएगा colNameअनुक्रमित है, लेकिन colName LIKE '%substring%'या colName LIKE '%suffix'क्योंकि एसक्यूएल सर्वर जब पाठ का अनुक्रमण प्रत्यय के पेड़ों का निर्माण नहीं करता धीमी गति से किया जाएगा। इसी तरह LEFTएक कॉलम के साथ उपयोग करना भी धीमा होगा क्योंकि वे प्रश्न SARGable नहीं हैं। SARGability महत्वपूर्ण है: dba.stackexchange.com/questions/162263/…
दाई

मैं नीचे उल्लिखित LIKE 'x%' विधि का परीक्षण करने की सलाह दूंगा। कुछ मामलों में यह बहुत तेज है
टोनी सीपिया

72

ऐसा लगता है कि आप जो चाहते हैं वह http://msdn.microsoft.com/en-us/library/ms186323.aspx है

आपके उदाहरण में यह होगा (साथ शुरू होता है):

set @isExpress = (CharIndex('Express Edition', @edition) = 1)

या होता है

set @isExpress = (CharIndex('Express Edition', @edition) >= 1)

क्यों नहीं का उपयोग करें Express Edition%? इसके अलावा, क्या आपका समाधान "एक्सप्रेस संस्करण" का सच नहीं है जो स्ट्रिंग में कहीं भी है? तो यह अधिक विशेष रूप से सिर्फ एक "कंटेंस" है इसे करने का तरीका है
डॉन चेडल

3
@mmcrae नीचे दिए गए संस्करण का उपयोग करते समय यह ठीक होगा कि यह पहला तरीका था जो मन में आया और ओपी के पास जैसा था वैसा ही दिखता है। इसके अलावा, पहली अभिव्यक्ति केवल तभी सही होगी, जब चर (charindex 1) दिए गए तर्क से शुरू होता है। दूसरी अभिव्यक्ति एक सम्‍मिलित है क्‍योंकि यह स्‍ट्रक्‍ट में कहीं भी पाया जाता है तो सच हो जाएगा (charindex 1 या अधिक रिटर्न)।
गैरी।

45

मै इस्तेमाल करूंगा

like 'Express Edition%'

उदाहरण:

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar)

DECLARE @isExpress bit
if @edition like 'Express Edition%'
    set @isExpress = 1;
else
    set @isExpress = 0;

print @isExpress

यदि आप प्रश्न पढ़ते हैं, तो यह कोई प्रश्न नहीं है। अपने उत्तर के साथ मेरे उदाहरण का प्रयास करें और फिर कृपया अपने उत्तर को अपडेट करके दिखाएं कि यह काम करता है।
वलमास

आप का उपयोग कर सकते हैं जैसे कि बयानों में टी- sql। यही कारण है कि मैं इस तरह का उपयोग करता हूं। मैं नहीं देखता कि आप मुझे इसके लिए माइनस पॉइंट क्यों देना चाहते हैं लेकिन क्यों नहीं।
थॉमस कोएले

9
यह पसंदीदा तरीका होना चाहिए; यह अधिक सुंदर, कम क्रिया है और "SQL संरेखित": जैसा कि यह मानक SQL LIKE ऑपरेटर का उपयोग करता है, मुझे इसे समझने के लिए प्रलेखन पढ़ने की आवश्यकता नहीं होनी चाहिए!
फेर गार्सिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.