sql >> Databáze >  >> RDS >> Sqlserver

SQL Řazení číselných řetězců po rozdělení

Proveďte řetězcové funkce v ORDER BY odstranit pouze číslo. Něco takového by mělo fungovat:

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)

Tím se nejprve odstraní IS- a zkontrolujte, zda zbytek řetězce je číslo. Pokud je, ponechá desetinné číslice, jinak odstraní . a následující alfa znaky.

To za předpokladu, že zamýšlené pořadí v případě číselných desetinných míst by bylo:

IS-123.A
IS-123.1
IS-123.2

Pokud vás nezajímá, co je za desetinnou tečkou/tečkou, pak jednoduše:

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


  1. Příklad funkce Oracle (vrácené číslo)

  2. číslo třídícího řetězce mysql

  3. Dotaz JPA ve více tabulkách se vztahem many-to-many

  4. Optimalizátor ignoruje podmínku filtrovaného indexu