sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Hur kan jag implementera en naturlig order-by i en SQL-fråga?

Du kan använda funktioner i din order-by-klausul. I det här fallet kan du dela de icke-numeriska och numeriska delarna av fältet och använda dem som två av ordningskriterierna.

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

Du kan också skapa ett funktionsbaserat index för att stödja detta:

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


  1. Subquerys rand()-kolumn omvärderas för varje upprepat val i MySQL 5.7/8.0 vs MySQL 5.6

  2. Korrekt hantering av långa data i Hibernate

  3. Varför får jag ett felmeddelande om att det inte gick att ansluta till servern för postgres i Mac OS Lion?

  4. Använd tabellkolumnvärdet för LIMIT när du utför join