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

एकाधिक दशमलव बिंदुओं के साथ Oracle से रिकॉर्ड सॉर्ट करना (.)

जब अधिकतम गहराई ज्ञात हो, तो आप अनुभाग को उप-अनुभागों में विभाजित कर सकते हैं:

SQL> SELECT SECTION FROM DATA
  2   ORDER BY to_number(regexp_substr(SECTION, '[^.]+', 1, 1)) NULLS FIRST,
  3            to_number(regexp_substr(SECTION, '[^.]+', 1, 2)) NULLS FIRST,
  4            to_number(regexp_substr(SECTION, '[^.]+', 1, 3)) NULLS FIRST;

SECTION
-------
1
1.1
1.1.2
1.1.6
6.1
6.2
[...]
8.5
10
11

यदि उप-वर्गों की अधिकतम गहराई अज्ञात है (लेकिन संभवतः 8-बिट कैरेक्टर डेटाबेस पर कुछ सौ से कम या एएनएसआई-कैरेक्टर डेटाबेस में कुछ हज़ार से कम), तो आप एक फ़ंक्शन को परिभाषित कर सकते हैं जो आपके अस्थिर अंकों को सॉर्ट करने योग्य वर्णों में परिवर्तित करता है :

SQL> CREATE OR REPLACE FUNCTION order_section (p_section VARCHAR2)
  2     RETURN VARCHAR2 IS
  3     l_result VARCHAR2(4000);
  4  BEGIN
  5     FOR i IN 1..regexp_count(p_section, '[^.]+') LOOP
  6        l_result := l_result
  7                    || CASE WHEN i > 1 THEN '.' END
  8                    || CHR(64+regexp_substr(p_section, '[^.]+', 1, i));
  9     END LOOP;
 10     RETURN l_result;
 11  END;
 12  /

Function created

SQL> SELECT SECTION, order_section(SECTION)
  2    FROM DATA
  3   ORDER BY 2;

SECTION ORDER_SECTION(SECTION)
------- -------------------------
1       A
1.1     A.A
1.1.2   A.A.B
1.1.6   A.A.F
6.1     F.A
6.2     F.B
[...]
8.5     H.E
10      J
11      K


  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. कहां क्लॉज में उपनाम का उपयोग कैसे करें?

  4. ट्यूनिंग एसक्यूएल

  5. ऑब्जेक्ट को CLOB में कनवर्ट करना