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

एसक्यूएल में संख्याओं वाले स्ट्रिंग कॉलम को सॉर्ट करना?

धारणा पर जा रहे हैं यह हमेशा WORD_space_NUMBER होता है, इसे काम करना चाहिए:

SELECT   *
FROM     table
ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)

POSITION का उपयोग करें स्थान खोजने के लिए, SUBSTRING इसके बाद के नंबर को हथियाने के लिए, और CAST ए> इसे एक तुलनीय मूल्य बनाने के लिए।

यदि कॉलम का कोई भिन्न पैटर्न है, तो मुझे बताएं और मैं एक बेहतर कार्य-आसपास तैयार करने का प्रयास करूंगा।

संपादित करें काम करने के लिए सिद्ध:

mysql> INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM t ORDER BY st;
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  4 | a 11 |
|  2 | a 12 |
|  3 | a 6  |
+----+------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  3 | a 6  |
|  4 | a 11 |
|  2 | a 12 |
+----+------+

mysql> INSERT INTO t (st) VALUES ('b 1'),('b 12'),('b 6'),('b 11');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  5 | b 1  |
|  3 | a 6  |
|  7 | b 6  |
|  4 | a 11 |
|  8 | b 11 |
|  2 | a 12 |
|  6 | b 12 |
+----+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM t ORDER BY LEFT(st,LOCATE(' ',st)), CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
+----+------+
| id | st   |
+----+------+
|  1 | a 1  |
|  3 | a 6  |
|  4 | a 11 |
|  2 | a 12 |
|  5 | b 1  |
|  7 | b 6  |
|  8 | b 11 |
|  6 | b 12 |
+----+------+
8 rows in set (0.00 sec)

मेरी लंगड़ी तालिका/स्तंभ नामों पर ध्यान न दें, लेकिन मुझे सही परिणाम देता है। साथ ही थोड़ा और आगे बढ़े और अंकों के साथ उपसर्ग को तोड़ने के लिए डबल सॉर्ट जोड़ा।

संपादित करें SUBSTRING_INDEX इसे थोड़ा और पठनीय बना देगा।

ORDER BY SUBSTRING_INDEX(st, " ", 1) ASC, CAST(SUBSTRING_INDEX(st, " ", -1) AS SIGNED)


  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. MYSQL SUM GROUP BY

  4. सोनारक्यूब :माप_डेटा.आईबीडी के आकार को कैसे कम करें?

  5. मैसकल जहां आईडी सरणी में है