2013-02-16 23 views
16

एसक्यूएल सीखना शुरू होता है। फ़ील्ड शीर्षक के साथ एक साधारण टेबल गेम है। मैं शीर्षक के आधार पर खोजना चाहता हूं। अगर मेरे पास Age of Empires III: Dynasties नामक गेम है, और मैं LIKE पैरामीटर Age of Empires III: Dynasties के साथ उपयोग करता हूं, तो सब ठीक काम करता है, खोज उस नाम के साथ रिकॉर्ड लौटाती है। लेकिन अगर मैं Age of Empires III साथ खोजते हैं, यह किसी भी रिकॉर्ड वापस नहीं करता है:एसक्यूएल जैसे सर्च स्ट्रिंग

SELECT * from games WHERE (lower(title) LIKE 'age of empires III'); 

यह कुछ भी वापस नहीं करता है। क्या मुझे LIKE के बजाय कुछ और उपयोग करना चाहिए?

मैं MySQL का उपयोग कर रहा हूं।

उत्तर

24
SELECT * from games WHERE (lower(title) LIKE 'age of empires III'); 

ऊपर क्वेरी किसी भी पंक्तियों को वापस नहीं करता है क्योंकि आप ' 'साम्राज्यों की आयु III' की सटीक स्ट्रिंग की तलाश कर रहे हैं जो किसी भी पंक्ति में मौजूद नहीं है।

तो विभिन्न तार के साथ इस स्ट्रिंग जो 'age of empires'-स्ट्रिंग के रूप में आप '%your string goes here%'

अधिक उपयोग करने के लिए mysql string comparision

पर की जरूरत है आप इस

SELECT * from games WHERE (lower(title) LIKE '%age of empires III%'); 

की तरह में प्रयास करने की आवश्यकता के साथ मिलान करने के लिए '%age of empires III%' यह आपकी पंक्तियों में किसी भी मिलान करने वाली सबस्ट्रिंग की खोज करेगा, और यह परिणाम में दिखाएगा।

+4

'LIKE' के दाईं ओर वाली स्ट्रिंग में अपरकेस वर्ण हैं, क्या यह एक स्ट्रिंग से मेल खाता है जो कम मामले में परिवर्तित हो जाता है? –

+0

यह कॉलम/डेटाबेस के संयोजन पर निर्भर करता है। इसे सुरक्षित करने के लिए आप चुनें * गेम से चुनें (निचले (शीर्षक) जैसे कम ('साम्राज्यों की%% आयु'%)); –

2

COLLATE UTF8_GENERAL_CI अनदेखा-मामले के रूप में काम करेगा। उपयोग:

SELECT * from games WHERE title COLLATE UTF8_GENERAL_CI LIKE 'age of empires III%'; 

या

SELECT * from games WHERE LOWER(title) LIKE 'age of empires III%'; 
16

आप वाइल्डकार्ड का उपयोग करने के % की जरूरत है:

SELECT * from games WHERE (lower(title) LIKE 'age of empires III%'); 
+0

ऐसा लगता है कि यह तेज़ होगा क्योंकि यह केवल शुरुआत के लिए मिलान की खोज कर रहा है। – ChrisB