2011-12-07 8 views
20

मैं एसक्यूएल के लिए बिल्कुल नया हूं और मैं उत्पादों की पूरी सूची प्राप्त करने की कोशिश कर रहा था जो productID के उपयोगकर्ता इनपुट से मेल खाते हैं। कुछ की तरह:एक आईएनटी फ़ील्ड पर एक LIKE तुलना करना

SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%' 

मुझे यह पसंद है जैसे सभी मेल खाने वाले उत्पादों की सूची के लिए होगा: 15, 150, 2154, आदि

दुर्भाग्य से मैं समस्याओं में चल रहा हूँ क्योंकि productId क्षेत्र एक INT है और एक स्ट्रिंग नहीं। क्या इसके आसपास कुछ अपेक्षाकृत सरल तरीका है?

+1

यदि "सही" उत्तर मान को टेक्स्ट में कनवर्ट/कास्ट करना है तो तालिका को कॉलम को स्थायी रूप से परिवर्तित करने के लिए बदला जाना चाहिए। यह सहज है क्योंकि आपको उत्पाद पहचानकर्ताओं पर गणित करने की आवश्यकता नहीं है। – onedaywhen

उत्तर

29

आप एक स्ट्रिंग के लिए क्षेत्र CAST कर सकते हैं:

... WHERE CAST(ProductID as CHAR) LIKE '%15%' 

इस प्रदर्शन के लिए बहुत खराब है, MySQL किसी भी अनुक्रमित यह INT स्तंभ के लिए बनाया का उपयोग नहीं कर सकते हैं। लेकिन फिर, LIKE हमेशा वर्चर फ़ील्ड पर किए जाने पर भी धीमा होता है: एक ऐसी इंडेक्स रखने का कोई तरीका नहीं है जो एक LIKE क्वेरी को गति देता है।

यह एक दूसरे varchar स्तंभ int स्तंभ के मानों दर्पण होने और उस पर की तरह कर रही है लायक हो सकता है - आप बाहर चाहे वह किसी भी अच्छे करूँगा खोजने के लिए बेंचमार्क होगा।

+0

CONVERT का उपयोग करने से CAST का उपयोग कर तेजी से उपयोग कर रहा है? – Maxx

+1

@Maxx वे एक ही फ़ंक्शन के समानार्थी हैं, इसलिए कोई अंतर नहीं है। –

+0

{"अभिव्यक्ति में अपरिभाषित फ़ंक्शन कॉल CAST() है।"} जो मैं देख रहा हूं :( – Maxx

4

आप convertCONVERT(ProductID, CHAR(16)) AS ProductID का उपयोग करके स्ट्रिंग करने के लिए int कर सकते हैं और फिर LIKE का उपयोग कर सकते हैं। तो आपके मामले में यह

SELECT ProductID, ProductName FROM Products 
WHERE CONVERT(ProductID, CHAR(16)) LIKE '%15%' 

आपको याद रखना चाहिए कि क्वेरी इंडेक्स से किसी भी समर्थन के बिना पूर्ण टेबल स्कैन करेगी। नतीजतन यह वास्तव में महंगा और समय लेने वाला होगा।

+0

क्या आप अधिक विशिष्ट हो सकते हैं? मैं एक नोब की तरह हूँ :) शायद एक उदाहरण जोड़ें। – Maxx

+0

{"अभिव्यक्ति में अपरिभाषित फ़ंक्शन कॉल CHAR() है।"} जो मैं देख रहा हूं। – Maxx

+0

आप किस MySQL संस्करण का उपयोग कर रहे हैं? – Jan

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