Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:Jak mogę zaimplementować naturalną kolejność-by w zapytaniu SQL?

Możesz używać funkcji w klauzuli order-by. W takim przypadku możesz podzielić nienumeryczne i numeryczne części pola i użyć ich jako dwóch kryteriów porządkowania.

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

Możesz również utworzyć indeks oparty na funkcjach, aby to wspierać:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dlaczego zapytanie trwa zbyt długo

  2. Oracle LITAGG() dla wielu atrybutów?

  3. ORA-01460:zażądano niewdrożonej lub nieuzasadnionej konwersji

  4. sekwencja hibernacji wyroczni wytwarza dużą lukę

  5. Regularna, powtarzająca się interakcja między wyrocznią a inteligentnym kontraktem