Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Wie kann ich ein natürliches Order-By in einer SQL-Abfrage implementieren?

Sie können Funktionen in Ihrer Order-By-Klausel verwenden. In diesem Fall können Sie die nicht numerischen und numerischen Teile des Felds aufteilen und sie als zwei der Sortierkriterien verwenden.

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

Sie können auch einen funktionsbasierten Index erstellen, um dies zu unterstützen:

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