Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL क्वेरी: निश्चित अंतिम स्ट्रिंग वर्ण के आधार पर क्रमबद्ध करें

परिचय

जब कॉलम मानों में हाइफ़न (-) से अलग सफ़िक्स हों (जैसे 'John-D', 'John-Smith'), और आप उन सफ़िक्स के आधार पर क्रमबद्ध करना चाहते हैं, तो MySQL के स्ट्रिंग फंक्शन्स और CASE स्टेटमेंट का उपयोग किया जा सकता है।

उदाहरण: टेबल बनाना और डेटा डालना

mysql> CREATE TABLE DemoTable (
    -> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ClientName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('Mike');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('John');
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('John-D');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('John-Smith');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('Mike-Smith');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('Mike-D');
Query OK, 1 row affected (0.15 sec)

सभी रिकॉर्ड देखना

mysql> SELECT * FROM DemoTable;

आउटपुट:

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1        | Mike       |
| 2        | John       |
| 3        | John-D     |
| 4        | John-Smith |
| 5        | Mike-Smith |
| 6        | Mike-D     |
+----------+------------+
6 rows in set (0.00 sec)

अंतिम स्ट्रिंग वर्ण के आधार पर क्रमबद्ध करने की क्वेरी

mysql> SELECT
    ->   CASE
    ->     WHEN RIGHT(ClientName, LENGTH(ClientName) - INSTR(ClientName, '-')) = ClientName THEN ''
    ->     ELSE RIGHT(ClientName, LENGTH(ClientName) - INSTR(ClientName, '-'))
    ->   END AS `last`,
    ->   `ClientName`
    -> FROM DemoTable
    -> ORDER BY `last`, `ClientName`;

परिणाम

+-------+------------+
| last  | ClientName |
+-------+------------+
|       | John       |
|       | Mike       |
| D     | John-D     |
| D     | Mike-D     |
| Smith | John-Smith |
| Smith | Mike-Smith |
+-------+------------+
6 rows in set (0.00 sec)

व्याख्या

  • INSTR(ClientName, '-') - हाइफ़न की स्थिति खोजता है
  • LENGTH(ClientName) - INSTR(...) - हाइफ़न के बाद के अक्षरों की संख्या
  • RIGHT(ClientName, ...) - हाइफ़न के बाद का भाग (सफ़िक्स) निकालता है
  • CASE ... WHEN ... = ClientName THEN '' - यदि हाइफ़न नहीं है तो खाली स्ट्रिंग
  • ORDER BY `last`, `ClientName` - पहले सफ़िक्स से, फिर पूरे नाम से क्रमबद्ध

सरल विकल्प

यदि सभी मानों में हाइफ़न है या आप NULL सॉर्ट करना चाहते हैं:

SELECT ClientName,
       SUBSTRING_INDEX(ClientName, '-', -1) AS suffix
FROM DemoTable
ORDER BY suffix, ClientName;

SUBSTRING_INDEX(str, delim, -1) अंतिम डिलीमीटर के बाद का भाग लौटाता है, जो अधिक सरल और पठनीय है।

  1. - MySQL में SUBSTRING_INDEX का नेस्टेड उपयोग करके विभाजक के आधार पर स्ट्रिंग का भाग निकालना

    MySQL में नेस्टेड SUBSTRING_INDEX() फ़ंक्शन का उपयोग करके विशिष्ट घटना के आधार पर स्ट्रिंग का भाग निकालें। उदाहरण: टेबल बनाना और डेटा डालना mysql> CREATE TABLE DemoTable ( -> Code VARCHAR(100) -> ); Query OK, 0 rows affected (1.07 sec) mysql> INSERT INTO DemoTable VALUES -

  1. - MySQL में विशेष वर्ण से पहले का सबस्ट्रिंग प्रदर्शित करने की क्वेरी

    MySQL में इसके लिए LOCATE() और SUBSTRING() मेथड का उपयोग करें। उदाहरण टेबल बनाएं: mysql> create table DemoTable ( -> Title text -> ); Query OK, 0 rows affected (0.54 sec) रिकॉर्ड डालें: mysql> insert into DemoTable values(Introduction To Java); Query OK, 1 row affected (0.14 se

  1. - MySQL में विशिष्ट अंक/अक्षर से समाप्त होने वाले कॉलम मान कैसे चुनें?

    MySQL LIKE ऑपरेटर: पैटर्न मिलान से मान चुनना LIKE ऑपरेटर के साथ वाइल्डकार्ड % का उपयोग करके आप उन मानों को चुन सकते हैं जो किसी विशिष्ट अक्षर या अंक से समाप्त होते हैं। उदाहरण: 8 अंक से समाप्त होने वाली संख्याएं टेबल बनाएं: CREATE TABLE DemoTable (Number INT); INSERT INTO DemoTable VALUES (189), (