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

Oracle :Comment puis-je implémenter un tri naturel dans une requête SQL ?

Vous pouvez utiliser des fonctions dans votre clause de commande. Dans ce cas, vous pouvez diviser les parties non numériques et numériques du champ et les utiliser comme deux des critères de tri.

select * from t
 order by to_number(regexp_substr(a,'^[0-9]+')),
          to_number(regexp_substr(a,'[0-9]+$')),
          a;

Vous pouvez également créer un index basé sur des fonctions pour prendre en charge ceci :

create index t_ix1
    on t (to_number(regexp_substr(a, '^[0-9]+')),
          to_number(regexp_substr(a, '[0-9]+$')), 
          a);