MySQL में अपरकेस वर्णों वाली पंक्तियों को वापस करने के लिए यहां तीन विकल्प दिए गए हैं।
नमूना डेटा
मान लीजिए हमारे पास निम्न डेटा वाली एक तालिका है:
SELECT c1 FROM t1;
परिणाम:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | café | | 1café | | eCafé | | James Bond 007 | | JB 007 | | 007 | | NULL | | | | É | | É 123 | | é | | é 123 | | ø | | Ø | +----------------+
अपरकेस अक्षरों वाली पंक्तियों को वापस करने के लिए हम निम्नलिखित विधियों का उपयोग कर सकते हैं।
विकल्प 1:LOWER()
से तुलना करें स्ट्रिंग
हम LOWER()
. का उपयोग कर सकते हैं मूल मान की तुलना इसके लोअरकेस समकक्ष से करने के लिए कार्य करता है:
SELECT c1 FROM t1
WHERE CAST(LOWER(c1) AS BINARY) <> CAST(c1 AS BINARY);
परिणाम:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | | É | | É 123 | | Ø | +----------------+
के बराबर नहीं का उपयोग करके (<>
) ऑपरेटर (आप वैकल्पिक रूप से !=
. का उपयोग कर सकते हैं के बजाय <>
यदि आप चाहें), तो हम केवल उन्हीं पंक्तियों को लौटाते हैं जो उनके लोअरकेस समकक्षों से भिन्न होती हैं। हम ऐसा इसलिए करते हैं क्योंकि, यदि कोई मान इसके लोअरकेस समकक्ष के समान है, तो यह पहले से ही लोअरकेस था (और हम इसे वापस नहीं करना चाहते हैं)।
डिफ़ॉल्ट रूप से, MySQL केस-असंवेदनशील खोज करता है, और इसलिए मैं CAST()
. का उपयोग करता हूं केस-संवेदी खोज प्राप्त करने के लिए मानों को बाइनरी में डालने का कार्य करता है।
BINARY
. का उपयोग करना भी संभव है मान को बाइनरी में डालने के लिए ऑपरेटर, लेकिन इस ऑपरेटर को MySQL 8.0.27 के रूप में हटा दिया गया है और इसे भविष्य के रिलीज में हटाया जा सकता है।
किसी भी मामले में, BINARY
. का उपयोग करते समय कोड ऐसा दिखता है ऑपरेटर:
SELECT c1 FROM t1
WHERE BINARY LOWER(c1) <> BINARY c1;
इसे इस तरह भी किया जा सकता है:
SELECT c1 FROM t1
WHERE BINARY(LOWER(c1)) <> BINARY(c1);
MySQL 8.0.27 में कोड चलाते समय मुझे इन दोनों से मिलने वाले परिणाम यहां दिए गए हैं:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | | É | | É 123 | | Ø | +----------------+ 8 rows in set, 2 warnings (0.00 sec)
और जब मैं चेतावनियां दिखाता हूं:
SHOW WARNINGS;
परिणाम:
+---------+------+----------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------------------------------------------------+ | Warning | 1287 | 'BINARY expr' is deprecated and will be removed in a future release. Please use CAST instead | | Warning | 1287 | 'BINARY expr' is deprecated and will be removed in a future release. Please use CAST instead | +---------+------+----------------------------------------------------------------------------------------------+
विकल्प 2:वास्तविक वर्णों से तुलना करें
एक अन्य विकल्प REGEXP
. का उपयोग करना है एक नियमित अभिव्यक्ति पैटर्न वाला ऑपरेटर जिसमें स्पष्ट रूप से प्रत्येक अपरकेस वर्ण शामिल होता है जिसे हम मिलान करना चाहते हैं:
SELECT c1 FROM t1
WHERE CAST(c1 AS BINARY) REGEXP CAST('[ABCDEFGHIJKLMNOPQRSTUVWXYZ]' AS BINARY);
परिणाम:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | +----------------+
पिछले उदाहरणों की तुलना में इस बार कम पंक्तियाँ दी गई हैं। ऐसा इसलिए है क्योंकि मैंने É
. जैसे वर्ण निर्दिष्ट नहीं किए हैं और Ø
, जो उन उदाहरणों में लौटाए गए थे। हमारे परिणाम में É
. शामिल है लेकिन वह पंक्ति केवल इसलिए लौटाई गई क्योंकि इसमें अन्य अपरकेस वर्ण भी शामिल हैं जो करते हैं मैच।
इसलिए, आपको यह सुनिश्चित करना होगा कि यदि आप इस विकल्प का उपयोग करते हैं तो आपके पास सभी मान्य वर्ण शामिल हैं।
विकल्प 3:वर्णों की श्रेणी से तुलना करें
ऐसा करने का एक और तरीका है कि हम उन अपरकेस वर्णों की श्रेणी निर्दिष्ट करें जिनका हम मिलान करना चाहते हैं:
SELECT c1 FROM t1
WHERE CAST(c1 AS BINARY) REGEXP CAST('[A-Z]' AS BINARY);
परिणाम:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | +----------------+