sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Sortera numeriska strängar efter uppdelning

Gör strängfunktioner i din ORDER BY för att bara ta bort numret. Något sådant här borde fungera:

SELECT col
FROM table
ORDER BY CAST(CASE WHEN ISNUMERIC(SUBSTRING(col,4,20)) = 1
              THEN SUBSTRING(col,4,20)
              ELSE LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1)
         END AS NUMERIC)

Detta tar först bort IS- och kontrollera om resten av strängen är ett nummer. Om den är det kommer den att lämna decimalsiffrorna, annars tar den bort . och följande alfatecken.

Detta förutsätter att din avsedda beställning i fallet med numeriska decimaler skulle vara:

IS-123.A
IS-123.1
IS-123.2

Om du inte bryr dig om vad som står efter decimalen/punkten, gör du helt enkelt:

ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)


  1. Naturlig koppling i SQL Server

  2. Returnera datarader från ett pl/sql-block

  3. Cloud Vendor Deep-Dive:PostgreSQL på AWS Aurora

  4. ModuleNotFoundError:Ingen modul med namnet 'mysql'