Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Sortowanie alfanumeryczne

Oto wskazówka:za każdym razem, gdy masz problemy z sortowaniem, dodaj kolejność według elementów do klauzuli select. pozwoli Ci to sprawdzić, czy to, według czego sortujesz, jest rzeczywiście tym, według którego chcesz sortować:

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

Po prawidłowym sortowaniu wystarczyło przenieść instrukcje przypadku do klauzuli kolejności według:

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

Zasadniczo miałeś 4 główne problemy:

  • Twoje alfabetyczne wyrażenie sortowania zakładało, że każdy wiersz zawiera liczby.
  • Twoje alfabetyczne wyrażenie sortowania zawierało zarówno liczby, jak i tekst.
  • Twoje wyrażenie sortowania liczbowego zawierało zarówno wartości liczbowe, jak i alfabetyczne.
  • Ze względu na artykuł 3 nie można było rzutować wyrażenia sortowania liczbowego na typ liczbowy i dlatego można uzyskać sortowanie ciągów.

Zobacz te skrzypce sql



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest SQL Server Management Studio (SSMS)?

  2. Jak korzystać z właściwości IDENTITY() w SQL Server

  3. SQL Server — krótkie obwody zapytań?

  4. WYBRAĆ Z procedury składowanej?

  5. Jak pogrupować wiersze o tej samej wartości w sql?