Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Ordina le stringhe numeriche dopo la divisione

Esegui funzioni di stringa nel tuo ORDER BY per rimuovere solo il numero. Qualcosa del genere dovrebbe funzionare:

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)

Questo rimuoverà prima IS- e controlla se il resto della stringa è un numero. Se lo è, lascerà le cifre decimali, altrimenti rimuoverà il . e i seguenti caratteri alfabetici.

Ciò presuppone che l'ordine previsto nel caso di cifre decimali sia:

IS-123.A
IS-123.1
IS-123.2

Se non ti interessa cosa c'è dopo il decimale/punto, allora semplicemente:

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