डिफ़ॉल्ट रूप से, SQLite LIKE
एएससीआईआई वर्णों के लिए ऑपरेटर केस-असंवेदनशील है। इसका मतलब है कि यह अपरकेस और लोअरकेस वर्णों से मेल खाएगा, भले ही आप अपने पैटर्न में किसी भी मामले का उपयोग करें।
हालाँकि, एक तकनीक है जिसका उपयोग आप इसे केस-संवेदी बनाने के लिए कर सकते हैं।
SQLite में PRAGMA स्टेटमेंट होता है जिसे केस_सेंसिटिव_लाइक . कहा जाता है , जिसे विशेष रूप से LIKE
. बनाने के लिए डिज़ाइन किया गया है ASCII वर्णों के लिए ऑपरेटर केस-संवेदी।
मेरे द्वारा "ASCII वर्ण" निर्दिष्ट करने का कारण यह है कि LIKE
यूनिकोड वर्णों के लिए ऑपरेटर डिफ़ॉल्ट रूप से केस संवेदनशील होता है जो ASCII सीमा से परे होते हैं।
इसलिए, यदि आपको LIKE
. की आवश्यकता है एएससीआईआई रेंज में केस संवेदी होने के लिए ऑपरेटर, केस_सेंसिटिव_लाइक PRAGMA कथन वही हो सकता है जिसकी आप तलाश कर रहे हैं।
यह like()
. पर भी लागू होता है फ़ंक्शन, जो ठीक उसी तरह काम करता है जैसे LIKE
ऑपरेटर।
केस-सेंसिटिविटी को सक्षम/अक्षम करना
केस-संवेदनशीलता को सक्षम करने के लिए आप निम्न में से किसी भी बूलियन मान का उपयोग कर सकते हैं:
1
on
true
yes
केस-संवेदनशीलता को अक्षम करने के लिए आप निम्न में से किसी भी बूलियन मान का उपयोग कर सकते हैं:
0
off
false
no
तर्क या तो कोष्ठक में हो सकता है या इसे प्रज्ञा नाम से समान चिह्न से अलग किया जा सकता है।
कीवर्ड तर्क वैकल्पिक रूप से उद्धरणों में प्रदर्शित हो सकते हैं।
केस-असंवेदनशील उदाहरण
पहले देखते हैं कि क्या होता है जब हम केस_सेंसिटिव_लाइक . का उपयोग नहीं करते हैं PRAGMA स्टेटमेंट।
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
परिणाम:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
इस मामले में, पहला कॉलम केस-असंवेदनशील है - अपरकेस A लोअरकेस a . से मेल खाता है ।
और यहाँ एक डेटाबेस तालिका के विरुद्ध एक प्रश्न है।
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
परिणाम:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
इस मामले में, हमें उन सभी बिल्लियों के खिलाफ मैच मिलता है जिनके नाम Br . से शुरू होते हैं , भले ही हमारे मानदंड में लोअरकेस b . का उपयोग किया गया हो ।
केस-संवेदी उदाहरण
अब देखते हैं कि क्या होता है जब हम केस_सेंसिटिव_लाइक . का उपयोग करते हैं ASCII रेंज में केस-सेंसिटिविटी को सक्षम करने के लिए PRAGMA स्टेटमेंट।
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
परिणाम:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
तो इस बार अपरकेस A नहीं करता है लोअरकेस से मिलान करें a ।
और केस-संवेदनशीलता को सक्षम करने के बाद डेटाबेस उदाहरण यहां दिया गया है।
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
परिणाम:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
ध्यान दें कि मुझे PRAGMA स्टेटमेंट को फिर से चलाने की आवश्यकता नहीं है। मेरे कनेक्शन के लिए सेटिंग तब तक बनी रहती है जब तक कि मैं इसे बदल नहीं देता।
केस-संवेदनशीलता अक्षम करें
केस-संवेदनशीलता को अक्षम करने और क्वेरी को फिर से चलाने का एक उदाहरण यहां दिया गया है।
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
परिणाम:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
द लाइक () फंक्शन
जैसा कि बताया गया है, केस_सेंसिटिव_लाइक PRAGMA स्टेटमेंट like()
को भी प्रभावित करता है समारोह।
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
परिणाम:
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
यूनिकोड-अवेयर लाइक ऑपरेटर
यदि आपको एक यूनिकोड जागरूक LIKE
. की आवश्यकता है तो आप SQLite ICU एक्सटेंशन का भी उपयोग कर सकते हैं ऑपरेटर।
LIKE
. का क्रियान्वयन इस एक्सटेंशन में शामिल आईसीयू फ़ंक्शन का उपयोग करता है u_foldCase()
यूनिकोड वर्णों की पूरी श्रृंखला के लिए केस स्वतंत्र तुलना प्रदान करने के लिए।