2008-12-10 15 views

Répondre

0

Désolé, pas SQL réponse du tout. :) Pour la variante avec une lettre seulement ordre par longueur et alpha.

1

Ce que vous voulez est appelé un "tri naturel". Pour Microsoft SQL Server 2005, voir this question. Pour les autres langues, voir (par exemple) this other question.

0

Si vous pouvez garantir un modèle de/\ w \ d +/...

dans Postgres:

select foo from bar order by cast(substring(foo from 2) as int) 

..et similaire existera pour d'autres saveurs SQL. Esprit cher.

modifier: solution androïdes semble bien aussi:

..order by char_length(foo),foo 
0

Si on peut supposer que les valeurs de données ne contiennent que la lettre d et une valeur numérique, vous pouvez également utiliser:

select column from YourTable 
order by convert(int, replace(column, 'd', '')) 

S'il contient d'autres lettres, alors cette méthode devient rapidement inutilisable:

select column from YourTable 
order by convert(int, 
     replace(replace(replace(replace(replace(
      column, 'a', ''), 
       'b', ''), 
       'c', ''), 
       'd', ''), 
       'e', '') 
     ) 
Questions connexes