sql >> Database >  >> RDS >> Oracle

Oracle:hoe kan ik een natuurlijke volgorde in een SQL-query implementeren?

U kunt functies gebruiken in uw order-by-clausule. In dit geval kunt u de niet-numerieke en numerieke delen van het veld splitsen en deze als twee van de volgordecriteria gebruiken.

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

U kunt ook een op functies gebaseerde index maken om dit te ondersteunen:

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


  1. Android-gegevens ophalen uit database werkt niet (php + json + mysql)

  2. Mysqldumper:elke tafel afzonderlijk dumpen

  3. MySQL voorwaardelijk de booleaanse kolomwaarden van rijen BIJWERKEN op basis van een witte lijst met id's

  4. aggregaat van een lege resultatenset