समाधान
REGEXP_REPLACE, LENGTH और मान के आधार पर ORDER BY का उपयोग करें।
उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE demo18 (value TEXT);
mysql> INSERT INTO demo18 VALUES ('John Smith'), ('2J John has 58'), ('2J John has 9');
क्वेरी
mysql> SELECT * FROM demo18
-> ORDER BY REGEXP_REPLACE(value, '[0-9]*$', ''),
-> LENGTH(value),
-> value;
परिणाम
+----------------+ | value | +----------------+ | 2J John has 9 | | 2J John has 58 | | John Smith | +----------------+
व्याख्या: REGEXP_REPLACE अंत के अंकों को हटाता है, फिर लंबाई के अनुसार क्रमबद्ध करता है (छोटी स्ट्रिंग पहले), फिर लेक्सिकोग्राफिक क्रम। यह '2J John has 9' को '2J John has 58' से पहले रखता है।