Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Trier les chaînes numériques après le fractionnement

Faites des fonctions de chaîne dans votre ORDER BY pour supprimer uniquement le numéro. Quelque chose comme ceci devrait fonctionner :

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)

Cela supprimera d'abord le IS- et vérifiez si le reste de la chaîne est un nombre. Si c'est le cas, il laissera les chiffres décimaux, sinon il supprimera le . et les caractères alpha suivants.

Cela suppose que votre ordre prévu dans le cas de décimales numériques serait :

IS-123.A
IS-123.1
IS-123.2

Si vous ne vous souciez pas de ce qu'il y a après la virgule/le point, alors simplement :

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