2012-03-09 19 views
6

में सबस्ट्र के साथ चयन विवरण मेरे पास तीन फ़ील्ड के साथ नमूना तालिका है।WHERE क्लॉज

TableA 

    FieldA  FieldB  FieldC 
    ====================================== 
    123XYZ456  XYZ   John 
    124NNN333  NNN   Jenny 
    232XPT124  XPT   Jade 
    456XXX345  XXX   James 

FieldA 9. की एक fixedlength मैं इस मेज और कुछ अनुप्रयोगों को पहले से ही प्रयोग कर रहे हैं डिजाइन नहीं किया है।

मैं FieldA के विरुद्ध स्थितियों के साथ FieldB और FieldC चुनना चाहता हूं।

इस एसक्यूएल बयान का उपयोग करना:

SELECT FieldB, 
     FieldC 
FROM TableA 
WHERE FieldA LIKE Concat(@paramA, '%', @paramB) 

मैं अपने वांछित परिणाम प्राप्त नहीं कर सकते। जब मैं 12 की Parama मूल्य और '' की paramB मूल्य के साथ खोज करने के लिए प्रयास करते हैं, मैं 2 परिणाम प्राप्त:

FieldA  FieldB  FieldC 
    ====================================== 
    123XXX456  XXX   John 
    124XXX333  XXX   Jenny 

क्योंकि स्पष्ट रूप से यह 12% से मेल खाता है और कहा कि नहीं है कि मैं क्या चाहता हूँ। मैं चाहता हूं कि पैरा को स्ट्रिंग की सही अनुक्रमणिका से मेल खाना चाहिए।

यदि मैं paramA = '12' और paramB = '' खोजता हूं तो इसका कोई परिणाम नहीं होना चाहिए। फ़ील्ड प्राप्त करने के लिए (FieldB, FieldC), मुझे paramA = '123' और paramB = '456' के सही मानों की आवश्यकता है, इसलिए यह XYZ और John वापस आ जाएगा। अगर मैं James वापस करना चाहता हूं तो मुझे paramA = '456' और paramB = '345'

मैं इसके लिए SQL स्टेटमेंट को सही ढंग से कैसे बना सकता हूं? कोई उपाय? धन्यवाद।

+0

उर मूल रूप से abt सही पहले 3 और अंतिम 3 अक्षरों का संबंध? – Teja

+0

बिल्कुल! यही वही था जो मैं चाहता था। –

उत्तर

14

उपयोग LEFT() और RIGHT():

SELECT FieldB, FieldC 
FROM TableA 
WHERE LEFT(FieldA,3) = @paramA 
     AND RIGHT(FieldA,3) = @paramB; 
+0

धन्यवाद एडम। जवाब स्वीकार करने के लिए मैं 3 मिनट में वापस आऊंगा। :) –

+0

आपका स्वागत है। खुशी है कि हम मदद कर सकते हैं। एक कामकाजी समाधान के लिए – bernie

+0

+1, लेकिन शेष प्रश्न तब * क्यों * गतिशील काम नहीं करता है? –

3
SELECT Field2,Field3 
FROM TABLE 
WHERE SUBSTR(Field1,1,3)='123' AND SUBSTR(Field1,7,3)='456' 
1

आप यह स्पष्ट कारण है कि आप भी लेकिन सही व्यवहार क्या आप का वर्णन किया है पाने के लिए paramB अपने इनपुट सत्यापन में खाली होने की अनुमति दे रहे हैं नहीं किया है सिर्फ इतना है कि मामले के लिए जांच कर सकता है, अर्थात्:

WHERE @paramA!='' AND @paramB!='' AND FieldA LIKE Concat(@paramA, '%', @paramB) 
0
तो जैसा

: जैसे वर्गीकरण तालिका: अमेरिका में होम्स, अमेरिका आदि में भूमि ..

+०१२३५१६४१०६१
mysql_query("select classification from properties where LEFT(classification, 5) = 'Homes'"); 

परिणाम: होम्स

संबंधित मुद्दे