sql >> Database >  >> RDS >> Sqlserver

Numerieke tekenreeksen sorteren na splitsen

Voer tekenreeksfuncties uit in uw ORDER BY om alleen het nummer te verwijderen. Iets als dit zou moeten werken:

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)

Hiermee wordt eerst de IS- . verwijderd en controleer of de rest van de string een getal is. Als dat zo is, blijven de decimale cijfers staan, anders wordt de . en de volgende alfatekens.

Dit veronderstelt dat uw beoogde volgorde in het geval van numerieke decimalen zou zijn:

IS-123.A
IS-123.1
IS-123.2

Als het je niet uitmaakt wat er achter de komma/punt staat, doe dan gewoon:

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


  1. Dynamische kolomnamen in beeld (Postgres)

  2. Geneste zoekopdracht in squeel

  3. NULL-waarden binnen de NOT IN-clausule

  4. Sorteren op pagina's toevoegen en zoeken met jQuery datatable