当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《Oracle:如何在SQL查询中实现"自然"的顺序?》经验,为你挑选了1个好方法。

例如,

foo1
foo2
foo10
foo100

而不是

foo1
foo10
foo100
foo2

更新:对自己编码排序不感兴趣(虽然这本身就很有趣),但让数据库为我做排序.



1> Mark Harriso..:

您可以在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);


他同时发布了问题和答案.他或者想要分享他发现的这些知识,收集代表点,或两者兼而有之.
不是不礼貌,但它被标记为SQL.
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有