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

MySQL में अपरकेस अक्षरों वाली पंक्तियों को खोजने के 3 तरीके

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         |
+----------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं एक MySQL डेटाबेस में संभावित मान कैसे प्राप्त कर सकता हूं?

  2. वर्चुअलमिन:पासवर्ड बदलने के बाद आपके पास इस MySQL डेटाबेस तक पहुंच नहीं है

  3. MySQL उच्च उपलब्धता फ्रेमवर्क समझाया गया - भाग III:विफलता परिदृश्य

  4. स्क्रैच से पायथन फ्लास्क और MySQL का उपयोग करके एक वेब ऐप बनाना:भाग 4

  5. Node.js पर Sequelize का उपयोग करके जॉइन क्वेश्चन कैसे करें