Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle:Como posso implementar uma ordem natural em uma consulta SQL?


Você pode usar funções em sua cláusula order-by. Nesse caso, você pode dividir as partes não numéricas e numéricas do campo e usá-las como dois dos critérios de ordenação.
select * from t
 order by to_number(regexp_substr(a,'^[0-9]+')),
          to_number(regexp_substr(a,'[0-9]+$')),
          a;

Você também pode criar um índice baseado em função para dar suporte a isso:
create index t_ix1
    on t (to_number(regexp_substr(a, '^[0-9]+')),
          to_number(regexp_substr(a, '[0-9]+$')), 
          a);