SQLite like()
फ़ंक्शन आपको किसी दिए गए पैटर्न के विरुद्ध स्ट्रिंग की तुलना करने में सक्षम बनाता है। यदि आवश्यक हो तो आप एक एस्केप कैरेक्टर भी निर्दिष्ट कर सकते हैं।
आप like()
. का उपयोग कर सकते हैं LIKE
. के विकल्प के रूप में कार्य करता है ऑपरेटर (जो आपको Y LIKE X [ESCAPE Z]
. चलाने में सक्षम बनाता है) अभिव्यक्ति)।
सिंटैक्स
आप निम्न में से किसी एक का उपयोग कर सकते हैं:
like(X,Y)
like(X,Y,Z)
X
पैटर्न हैY
स्ट्रिंग हैZ
एक वैकल्पिक एस्केप कैरेक्टर है
मूल उदाहरण
निम्न तालिका लें:
CatId CatName ---------- ---------- 1 Brush 2 Flutter 3 100%Fluff 4 100$Fluff
हम उन सभी पंक्तियों को वापस करने के लिए निम्नलिखित कोड चला सकते हैं जहाँ बिल्ली का नाम F अक्षर से शुरू होता है:
SELECT * FROM Cats
WHERE like('F%', CatName);
परिणाम:
CatId CatName ---------- ---------- 3 Flutter
इस उदाहरण में, मैंने %
. का उपयोग किया है वाइल्डकार्ड वर्ण इंगित करता है कि कितने भी वर्ण अनुसरण कर सकते हैं (शून्य वर्णों सहित), और यह कि वे कोई भी वर्ण हो सकते हैं।
अंडरस्कोर (_) कैरेक्टर
यहां एक उदाहरण दिया गया है जो अंडरस्कोर का उपयोग करता है (_
) चरित्र। यह वाइल्डकार्ड वर्ण बिल्कुल एक वर्ण से मेल खाता है - न अधिक और न कम।
SELECT * FROM Cats
WHERE like('Br_sh', CatName);
परिणाम:
CatId CatName ---------- ---------- 1 Brush
जैसा कि उल्लेख किया गया है, यह केवल एक वर्ण से मेल खाता है। इसलिए, अपने डेटा के आधार पर, मैं निम्नलिखित कार्य नहीं कर सकता और किसी भी मैच की उम्मीद नहीं कर सकता।
SELECT * FROM Cats
WHERE like('Br_', CatName);
परिणाम:
(यह जानबूझकर खाली है क्योंकि कोई परिणाम नहीं है)।
एस्केपिंग कैरेक्टर
यदि आवश्यक हो तो आप पात्रों से बच भी सकते हैं। ऐसा करने के लिए, एस्केप कैरेक्टर को तीसरे पैरामीटर के रूप में जोड़ें (और इसे उस कैरेक्टर से पहले भी जोड़ें जिससे आप बचना चाहते हैं)।
SELECT * FROM Cats
WHERE like('100\%F%', CatName, '\');
परिणाम:
CatId CatName ---------- ---------- 3 100%Fluff
इस मामले में मैं प्रतिशत चिह्न से बच गया (%
) मैंने ऐसा इसलिए किया क्योंकि मैं उन बिल्लियों की तलाश में था जिनके नाम में वास्तविक प्रतिशत चिह्न था। दरअसल, इस मामले में मैं एक बहुत ही विशिष्ट बिल्ली के नाम की खोज कर रहा था - एक जो 100%F से शुरू होता है ।
अगर मैं इससे बच नहीं पाता, तो इसे वाइल्डकार्ड के रूप में इस्तेमाल किया जाता, और परिणाम अलग होते।
जब मैं एस्केप कैरेक्टर को हटाता हूं तो मुझे यही मिलता है।
SELECT * FROM Cats
WHERE like('100%F%', CatName);
परिणाम:
CatId CatName ---------- ---------- 3 100%Fluff 4 100$Fluff
बूलियन मान लौटाएं
आप like()
. का उपयोग कर सकते हैं एक 0 . वापस करने के लिए कार्य करता है या 1 , इस पर निर्भर करता है कि कोई मैच है या नहीं।
यह आसान हो सकता है यदि आपको सभी पंक्तियों को वापस करने की आवश्यकता है, लेकिन एक ध्वज के साथ भी जो दिखाता है कि वे आपके मानदंडों से मेल खाते हैं या नहीं।
यहाँ एक उदाहरण है।
SELECT
CatName,
like('F%', CatName)
FROM Cats;
परिणाम:
CatName CatName LIKE 'F%' ---------- ------------------ Brush 0 Flutter 1 100%Fluff 0 100$Fluff 0
इस मामले में, केवल एक पंक्ति मानदंड से मेल खाती है, लेकिन हमें अभी भी अन्य सभी पंक्तियाँ देखने को मिली हैं।
केस-सेंसिटिविटी
डिफ़ॉल्ट रूप से, SQLite like()
फ़ंक्शन ASCII वर्णों के लिए केस-असंवेदनशील है। इसका मतलब है कि यह अपरकेस और लोअरकेस वर्णों से मेल खाएगा, भले ही आप अपने पैटर्न में किसी भी मामले का उपयोग करें।
आप केस_सेंसिटिव_लाइक . का उपयोग कर सकते हैं PRAGMA कथन ASCII श्रेणी में केस-संवेदी मिलान करने के लिए।
उदाहरण के लिए SQLite के LIKE ऑपरेटर को केस-सेंसिटिव कैसे बनाएं देखें। वह लेख LIKE
. के लिए लिखा गया है ऑपरेटर, लेकिन यह like()
. पर भी लागू होता है समारोह।