के कुछ संभव आदानों पर विचार करें , यह प्रश्न उन सभी लोगों को उठाएगा जिनके पहले नाम में 'जॉन' है; यह उन सभी लोगों को भी चुन देगा जिनके अंतिम नाम में 'जॉन' है (उदाहरण के लिए, डेटाबेस में सभी जॉन्सन)। इसी प्रकार, दूसरा इनपुट उन सभी लोगों को चुन देगा जिनके पहले नाम में 'स्मिथ' है; यह उन सभी लोगों को भी चुन देगा जिनके अंतिम नाम में 'स्मिथ' (उदाहरण के लिए, स्मिथसन और स्मिथर्स) शामिल हैं। अब तक सब ठीक है; यह केस-सेंसिटीविटी के मुद्दों के कारण बिल्कुल सही नहीं है (मैं यहां से केस-सेंसिटीविटी को अनदेखा कर दूंगा, लेकिन आपको शायद इसे अनदेखा नहीं करना चाहिए), लेकिन यह ठीक रहेगा।
तीसरा इनपुट केवल उन लोगों को चुन देगा जिनके पहले नाम में 'जॉन स्मिथ' शामिल है; यह उन लोगों को भी उठाएगा जिनके अंतिम नाम में 'जॉन स्मिथ' शामिल है। हालांकि, यह संभावना है कि बहुत कम लोग हैं जो उन मानदंडों को पूरा करते हैं - जिन लोगों को जॉन स्मिथ कहा जाता है, वे सिर्फ पहले नाम पर जॉन होंगे और अंतिम नाम में स्मिथ होंगे। यह आपके मन में होने की संभावना नहीं है।
यह स्पष्ट नहीं है कि आपके पास तालिका में 'पूर्णनाम' नामक कॉलम है या नहीं। यदि आप करते हैं, तो आप पहले नाम और अंतिम नाम से अलग मिलान के बजाय उस कॉलम के खिलाफ मिलान कर सकते हैं। यदि आप नहीं करते हैं, तो हो सकता है कि आप इस तरह के कॉलम का निर्माण कर सकें और उसके बाद क्वेरी चला सकें।
SELECT *
FROM (SELECT firstname || ' ' || lastname AS fullname, ... FROM people) AS t
WHERE t.fullname LIKE '%user_submitted_data%'
यह उचित रूप से अच्छी तरह से काम करता है।
हालांकि, यदि आप 'चार्ल्स डी गॉल' (या 'चार्ल्स डी गॉल') या 'माइकल वैन डेन बर्ग' जैसे नामों के बारे में चिंतित हैं), तो कोई मिलान 'चार्ल्स गॉल' या ' माइकल बर्ग ', अकेले माइकल वेंडेनबर्ग चलो। आपको शायद उपयोगकर्ता इनपुट में किसी भी स्पेस वर्ण को '%' प्रतीक के साथ प्रतिस्थापित करने की आवश्यकता होगी। फिर भी, आपको समस्या का सामना करना पड़ता है कि शब्दों को उपयोगकर्ता द्वारा दिए गए अनुक्रम में प्रकट होना चाहिए - जो कोई फर्क नहीं पड़ता है, लेकिन आपको जानबूझकर यह तय करना चाहिए कि इससे कोई फर्क नहीं पड़ता। उदाहरण के लिए, यदि इनपुट 'एडम जॉन स्मिथ' है, तो क्वेरी 'जॉन एडम स्मिथ' नहीं पकड़ पाएगी; अगर इनपुट 'स्मिथ, जॉन' है, तो यह किसी को भी नहीं उठाएगा (सबसे अधिक संभावना है)।
यदि आप इसे प्रबंधित करना चाहते हैं, तो आपको शायद उपयोगकर्ता के इनपुट को टोकननाइज़ करना होगा, और अलग-अलग शब्दों पर खोज करना होगा।किसी शब्द की उप-स्ट्रिंग के बारे में पूछने से सावधान रहें (उदाहरण के लिए, कोई व्यक्ति नाम के रूप में 'डी' के बारे में पूछता है) - इस समय कोई भी प्रश्न यह सुनिश्चित नहीं करता है कि उपयोगकर्ता इनपुट शब्द मूल्यों में पूरे शब्दों से मेल खाते हैं (जॉन बनाम जॉनसन), और एसक्यूएल मानक LIKE ऑपरेटर के साथ ऐसा करने के लिए पर्याप्त असंभव है।
धन्यवाद, यह इसे ठीक करता है। – Jimmy