例如,
foo1 foo2 foo10 foo100
而不是
foo1 foo10 foo100 foo2
更新:对自己编码排序不感兴趣(虽然这本身就很有趣),但让数据库为我做排序.
您可以在order-by子句中使用函数.在这种情况下,您可以拆分字段的非数字和数字部分,并将它们用作两个排序条件.
select * from t order by to_number(regexp_substr(a,'^[0-9]+')), to_number(regexp_substr(a,'[0-9]+$')), a;
您还可以创建基于函数的索引来支持:
create index t_ix1 on t (to_number(regexp_substr(a, '^[0-9]+')), to_number(regexp_substr(a, '[0-9]+$')), a);