0

我有列值,例如A1,A20........A10.当我进行排序时,值显示为A1,A10, A2等等......

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

A1
A2
A10
A20 and so on..

有人可以告诉我如何实现这种排序吗?

4

2 回答 2

0

如果您的列的模式只是 AZ + 一些数字,您可以使用

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
于 2013-01-28T16:21:47.257 回答
0

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

关联

于 2013-01-28T16:37:34.713 回答