Oracle:如何在SQL查询中实现“自然”的顺序?

例如,

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,a);

dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。