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:UPPER() से तुलना करें स्ट्रिंग

हम UPPER() . का उपयोग कर सकते हैं मूल मान की तुलना इसके अपरकेस समकक्ष से करने के लिए कार्य करता है:

SELECT c1 FROM t1
WHERE CAST(UPPER(c1) AS BINARY) <> CAST(c1 AS BINARY);

परिणाम:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

के बराबर नहीं का उपयोग करके (<> ) ऑपरेटर (आप वैकल्पिक रूप से != . का उपयोग कर सकते हैं इसके बजाय <> यदि आप पसंद करते हैं), तो हम केवल उन पंक्तियों को लौटाते हैं जो उनके अपरकेस समकक्षों से भिन्न होती हैं। हम ऐसा इसलिए करते हैं क्योंकि, यदि कोई मान इसके अपरकेस समकक्ष के समान है, तो यह पहले से ही अपरकेस था (और हम इसे वापस नहीं करना चाहते हैं)।

डिफ़ॉल्ट रूप से, MySQL केस-असंवेदनशील खोज करता है, और इसलिए मैं CAST() . का उपयोग करता हूं केस-संवेदी खोज प्राप्त करने के लिए मानों को बाइनरी में डालने का कार्य करता है।

BINARY . का उपयोग करना भी संभव है मान को बाइनरी में डालने के लिए ऑपरेटर, लेकिन इस ऑपरेटर को MySQL 8.0.27 के रूप में हटा दिया गया है और इसे भविष्य के रिलीज में हटाया जा सकता है।

किसी भी मामले में, BINARY . का उपयोग करते समय कोड ऐसा दिखता है ऑपरेटर:

SELECT c1 FROM t1
WHERE BINARY UPPER(c1) <> BINARY c1;

इसे इस तरह भी किया जा सकता है:

SELECT c1 FROM t1
WHERE BINARY(UPPER(c1)) <> BINARY(c1);

MySQL 8.0.27 में कोड चलाते समय मुझे इन दोनों से मिलने वाले परिणाम यहां दिए गए हैं:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

और जब मैं चेतावनियां दिखाता हूं:

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é           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+

पिछले उदाहरणों की तुलना में इस बार कम पंक्तियाँ दी गई हैं। ऐसा इसलिए है क्योंकि मैंने é . जैसे वर्ण निर्दिष्ट नहीं किए हैं और ø , जो उन उदाहरणों में लौटाए गए थे। हमारे परिणाम में é . शामिल है लेकिन वह पंक्ति केवल इसलिए लौटाई गई क्योंकि इसमें अन्य लोअरकेस वर्ण भी शामिल हैं जो करते हैं मैच।

इसलिए, आपको यह सुनिश्चित करना होगा कि यदि आप इस विकल्प का उपयोग करते हैं तो आपके पास सभी मान्य वर्ण शामिल हैं।

विकल्प 3:वर्णों की श्रेणी से तुलना करें

ऐसा करने का दूसरा तरीका यह है कि हम उन वर्णों की श्रेणी निर्दिष्ट करें जिनका हम मिलान करना चाहते हैं:

SELECT c1 FROM t1
WHERE CAST(c1 AS BINARY) REGEXP CAST('[a-z]' AS BINARY);

परिणाम:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 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. PostgreSQL/MySQL में एक स्ट्रिंग से सबस्ट्रिंग कैसे निकालें?

  2. MySQL में विभाजन से अधिक रैंक कैसे करें

  3. MySQLdb मॉड्यूल लोड करने में त्रुटि 'क्या आपने mysqlclient या MySQL-python स्थापित किया?'

  4. एक पूर्णांक के रूप में MySQL में दो तिथियों के बीच वर्षों में अंतर प्राप्त करें

  5. MySQL में केस सेंसिटिव की तरह