Donc clairement un probleme de conversion de char en int
!
Verifie que substr(nom,5) correspond bien à tes numéros en le faisant passer dans le select, juste pour vérifier que c'est bien 5 et non 4.
Ensuite...je comprend pas pourquoi ton cast ne fonctionne pas, mais la en fait, tu es clairement en situation ou tu tri des chaines de caracteres en ordre decroissant, et c'est pour cela que les 1 se retrouve en dernier.
Essaye ca "order by cast((substr(nom,5)) as int) desc" mais j'y crois pas trop
!