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

MySQL में स्ट्रिंग और संख्या वाले VARCHAR रिकॉर्ड को कैसे क्रमबद्ध करें?

MySQL में अल्फान्यूमेरिक कोड (जैसे '100A', '101J') को संख्यात्मक भाग के अनुसार क्रमबद्ध करने के लिए ORDER BY column+0, column तकनीक का उपयोग करें।

समस्या

स्ट्रिंग क्रम: '100A', '100B', '101J', '101S', '103M' (लेक्सिकोग्राफिक)

वांछित क्रम: संख्यात्मक भाग पहले, फिर अक्षर

उदाहरण

mysql> CREATE TABLE DemoTable (StudentCode VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES ('101J'), ('100A'), ('100B'), ('101S'), ('103M');

क्वेरी

mysql> SELECT * FROM DemoTable ORDER BY StudentCode+0, StudentCode;

परिणाम

+-------------+
| StudentCode |
+-------------+
| 100A        |
| 100B        |
| 101J        |
| 101S        |
| 103M        |
+-------------+

कैसे काम करता है

  • StudentCode+0 - स्ट्रिंग को संख्या में बदलता है (अग्रणी अंक पढ़ता है, फिर रुक जाता है)
  • '100A'+0 = 100, '101J'+0 = 101, '103M'+0 = 103
  • संख्यात्मक क्रम: 100, 100, 101, 101, 103
  • टाई होने पर दूसरा StudentCode स्ट्रिंग क्रम लागू करता है

चेतावनी

5 warnings: Truncated incorrect INTEGER value: '100A'

ये चेतावनियां सामान्य हैं क्योंकि गैर-संख्यात्मक भाग काट दिया जाता है।

बेहतर विकल्प (MySQL 8.0+)

ORDER BY CAST(StudentCode AS UNSIGNED), StudentCode

जटिल पैटर्न के लिए

-- 'A-100', 'B-20' जैसे पैटर्न
ORDER BY 
    CAST(SUBSTRING_INDEX(StudentCode, '-', -1) AS UNSIGNED),
    StudentCode

उपयोग केस

  • उत्पाद कोड: SKU-100, SKU-20
  • दस्तावेज़ संख्या: INV-2024-001
  • संस्करण: v1.2, v1.10
  1. - MySQL में VARCHAR स्ट्रिंग से हाइफ़न के बाद की संख्याओं को कैसे हटाएं

    समाधान SUBSTRING_INDEX() फंक्शन का उपयोग करके हाइफ़न से पहले का भाग प्राप्त करें। उदाहरण टेबल बनाएं: INSERT INTO DemoTable2040 VALUES (John-232), (Carol-901), (David-987); अपडेट क्वेरी UPDATE DemoTable2040 SET StudentCode = SUBSTRING_INDEX(StudentCode, -, 1); परिणाम +-------------+ | StudentCod

  1. - MySQL में SELECT और SHOW कमांड के परिणामों को कैसे संयोजित करें

    समाधान उपयोगकर्ता-परिभाषित वेरिएबल (@) या सिस्टम वेरिएबल (@@) का उपयोग करके एक ही SELECT में कई मान दिखाएं। उपयोगकर्ता वेरिएबल SELECT @first_name AS EmployeeFirstName, @last_name AS EmployeeLastName; +-------------------+------------------+ | EmployeeFirstName | EmployeeLastName | +---------------

  1. - MySQL REGEXP: विशिष्ट संख्या से शुरू होने वाले स्ट्रिंग+नंबर रिकॉर्ड प्राप्त करें

    REGEXP पैटर्न Select yourColumnName1, yourColumnName2 from yourTableName where yourColumnName2 REGEXP ^yourStringValue[yourNumericValue]; उदाहरण: John से शुरू और फिर 5 या 6 insert into demo45(value) values(John500), (John1500), (John5500), (John6500), (John8600); क्वेरी: ^John[56] select id,val