SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

SQLite के LIKE ऑपरेटर को केस-सेंसिटिव कैसे बनाएं

डिफ़ॉल्ट रूप से, 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() यूनिकोड वर्णों की पूरी श्रृंखला के लिए केस स्वतंत्र तुलना प्रदान करने के लिए।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एंड्रॉइड में स्क्लाइट से लिस्ट व्यू

  2. एंड्रॉइड में स्क्लाइट डेटाबेस को कैसे रीसेट करें?

  3. SQLCipher को GreenDAO के साथ एकीकृत करना

  4. SQLite डेटा प्रकार

  5. Android में PhoneGap/Cordova का उपयोग करके पहले से भरे हुए SQLite डेटाबेस तक नहीं पहुंच सकता