Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Ordenar Strings Numéricas Após Dividir


Faça funções de string em seu ORDER BY para remover apenas o número. Algo assim deve 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)

Isso primeiro removerá o IS- e verifique se o resto da string é um número. Se estiver, deixará os dígitos decimais, caso contrário, removerá o . e os seguintes caracteres alfa.

Isso está assumindo que sua ordenação pretendida no caso de casas decimais numéricas seria:
IS-123.A
IS-123.1
IS-123.2

Se você não se importa com o que está depois do decimal/período, simplesmente:
ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)