Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:come posso implementare un ordine naturale in una query SQL?

Puoi utilizzare le funzioni nella tua clausola order-by. In questo caso, puoi dividere le porzioni non numeriche e numeriche del campo e usarle come due dei criteri di ordinamento.

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

Puoi anche creare un indice basato su funzioni per supportare questo:

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