sql >> Base de Datos >  >> RDS >> Oracle

Oracle:¿Cómo puedo implementar un orden natural en una consulta SQL?

Puede usar funciones en su cláusula order-by. En este caso, puede dividir las partes numéricas y no numéricas del campo y utilizarlas como dos de los criterios de ordenación.

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

También puede crear un índice basado en funciones para respaldar esto:

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