Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Numerische Zeichenfolgen nach der Aufteilung in SQL sortieren

Führen Sie Zeichenfolgenfunktionen in Ihrem ORDER BY aus um nur die Nummer zu entfernen. So etwas sollte funktionieren:

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)

Dadurch wird zuerst IS- entfernt und prüfen Sie, ob der Rest der Zeichenfolge eine Zahl ist. Wenn dies der Fall ist, werden die Dezimalstellen beibehalten, andernfalls wird . entfernt und die folgenden Alphazeichen.

Dies setzt voraus, dass Ihre beabsichtigte Reihenfolge im Fall von numerischen Dezimalstellen wie folgt lautet:

IS-123.A
IS-123.1
IS-123.2

Wenn Sie sich nicht darum kümmern, was nach dem Dezimalpunkt/Punkt steht, dann einfach:

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