sql >> Base de Datos >  >> RDS >> Sqlserver

SQL ordenar cadenas numéricas después de dividir

Haz funciones de cadena en tu ORDER BY para eliminar sólo el número. Algo como esto debería funcionar:

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)

Esto primero eliminará el IS- y verifique si el resto de la cadena es un número. Si es así, dejará los dígitos decimales, de lo contrario eliminará el . y los siguientes caracteres alfabéticos.

Esto supone que su pedido previsto en el caso de decimales numéricos sería:

IS-123.A
IS-123.1
IS-123.2

Si no te importa lo que hay después del punto/decimal, entonces simplemente:

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