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

SQL Sorter numeriske strenge efter opdeling

Udfør strengfunktioner i din ORDER BY for kun at fjerne nummeret. Noget som dette burde virke:

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)

Dette vil først fjerne IS- og tjek om resten af ​​strengen er et tal. Hvis den er, vil den efterlade decimalcifrene, ellers vil den fjerne . og følgende alfategn.

Dette antager, at din påtænkte bestilling i tilfælde af numeriske decimaler ville være:

IS-123.A
IS-123.1
IS-123.2

Hvis du er ligeglad med, hvad der står efter decimalen/punktum, så skal du blot:

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


  1. MySQL-forespørgsler er hurtige, når de køres direkte, men virkelig langsomme, når de køres som lagret proc

  2. Django:Exception Value (2013, '2013:Mistet forbindelse til MySQL-server under forespørgsel', ingen)

  3. Få N antal poster fra undertabel for hver overordnede post i en MySQL View

  4. Hvordan skriver man involveret rekursiv underforespørgsel i sqlplus med flere tabeller for at spore noder?