【问题标题】:How to get this sorting work in oracle?如何在 oracle 中进行这种排序工作?
【发布时间】:2013-01-28 16:13:36
【问题描述】:

我有像A1,A20........A10. 这样的列值,当我进行排序时,这些值显示为A1,A10, A2 等等......

但是,我想以这种格式显示列

A1
A2
A10
A20 and so on..

谁能告诉我如何实现这种排序?

【问题讨论】:

  • 所有值都以一个字母开头吗?还是可以有多个?

标签: oracle sorting sql-order-by


【解决方案1】:

如果您的列的模式只是 A-Z + 一些数字,您可以使用排序

select id
  from your_table
 order by regexp_replace(id, '[0-9]', ''), 
          to_number(regexp_replace(upper(id), '[A-Z]', ''));

regexp_replace(id, '[0-9]', ''),

上面只保留“A”,然后是“B”等。如果你不想这样做,你可以删除它。

但如果任何行有任何其他非数字字符,查询将因无效数字而失败。

例如:

SQL> select * from tester order by id;

ID
-----
A1
A10
A2
A3
A4
A5
A6
A7
A8
A9
B1
B10
B2
B3
B4
B5
B6
B7
B8
B9

20 rows selected.

SQL> select id from tester order by regexp_replace(id, '[0-9]', ''), to_number(regexp_replace(upper(id), '[A-Z]', ''));

ID
-----
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
B1
B2
B3
B4
B5
B6
B7
B8
B9
B10

【讨论】:

    【解决方案2】:

    Ask Tom 的另一种方法:

    select x from t
    order by decode(sign(ascii(substr(lpad(x, 2), 2))-64), 1,
                    lpad(x, 3, chr(58)),
                    lpad(x, 2));
    

    link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多