我有列值,例如A1,A20........A10.
当我进行排序时,值显示为A1,A10, A2
等等......
但是,我想以这种格式显示列
A1
A2
A10
A20 and so on..
有人可以告诉我如何实现这种排序吗?
我有列值,例如A1,A20........A10.
当我进行排序时,值显示为A1,A10, A2
等等......
但是,我想以这种格式显示列
A1
A2
A10
A20 and so on..
有人可以告诉我如何实现这种排序吗?
如果您的列的模式只是 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
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));