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

अल्फ़ान्यूमेरिक सॉर्ट

यहां एक टिप दी गई है:जब भी आपको सॉर्ट करने में समस्या आ रही हो, तो अपने चुनिंदा क्लॉज में आइटम्स के अनुसार ऑर्डर जोड़ें। यह आपको यह देखने में सक्षम करेगा कि आप जो क्रमबद्ध कर रहे हैं वह वास्तव में वह है जिसे आप क्रमबद्ध करना चाहते हैं:

SELECT Section,
        CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
          LEFT(Section,PATINDEX('%[0-9]%',Section)-1)
        ELSE 
          Section
        END As alphabetical_sort, -- alphabetical sort
        CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
          CAST(SUBSTRING(Section,PATINDEX('%[0-9]%',Section),LEN(Section)) as float)
        ELSE
          NULL
        END As Numeric_Sort
FROM dbo.Section
ORDER BY alphabetical_sort, Numeric_Sort

मेरे द्वारा सॉर्ट सही ढंग से प्राप्त करने के बाद, मुझे केवल केस स्टेटमेंट्स को क्लॉज द्वारा क्रम में ले जाना है:

SELECT Section
FROM dbo.Section
ORDER BY 
    CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
        LEFT(Section,PATINDEX('%[0-9]%',Section)-1)
    ELSE 
        Section
    END , -- Alphabetical sort
    CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
        CAST(SUBSTRING(Section,PATINDEX('%[0-9]%',Section),LEN(Section)) as float)
    ELSE
        NULL
    END  -- Numeric sort

मूल रूप से, आपको 4 प्रमुख समस्याएं थीं:

  • आपके वर्णमाला क्रम के व्यंजक ने माना कि प्रत्येक पंक्ति में संख्याएँ हैं।
  • आपकी वर्णानुक्रमिक क्रमबद्ध अभिव्यक्ति में संख्याओं के साथ-साथ पाठ भी शामिल है।
  • आपकी संख्यात्मक क्रमबद्ध अभिव्यक्ति में संख्यात्मक और वर्णानुक्रम दोनों मान थे।
  • अनुच्छेद 3 के कारण, आप अपनी संख्यात्मक सॉर्ट अभिव्यक्ति को एक संख्यात्मक प्रकार में नहीं डाल सके, और यही कारण है कि आपको एक स्ट्रिंग सॉर्ट मिलेगा।

यह sql fiddle देखें



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET/SQL में पैरामीटर तालिका का नाम?

  2. पैरामीटर वैरिएबल पर लाइक का उपयोग करना?

  3. 9 महत्वपूर्ण कार्य जिनके लिए डीबीए जिम्मेदार हैं

  4. टी-एसक्यूएल का उपयोग करके विदेशी कुंजी बाधाओं को अस्थायी रूप से कैसे अक्षम किया जा सकता है?

  5. SQL सर्वर केस एक्सप्रेशन