我正在使用Oracle 11.g. 我有一个包含三列的表格:
ID Varchar2(512)
FIRST_NAME Varchar2(512)
LAST_NAME Varchar2(512)
ID列存储数字和字母字符。我想从表格中选择三列:ID,LAST_NAME和FIRST_NAME。 我想通过ID列进行排序,但是将数字排序为数字并首先出现。
例如:
ID FN LN
3 Joe Jones
200 Sam Smith
1004 Tom Terrific
AA Cam Carson
MM Ed Edison
我如何为此构建Select语句?
我可以通过使用以下方式获取Numbers:
Select to_number(ID), LAST_NAME, FIRST_NAME
From CUSTOM_TABLE
Where ID < 'A'
Order by to_number(ID);
我只能通过以下方式获得Alpha:
Select ID, LAST_NAME, FIRST_NAME
From CUSTOM_TABLE
Where ID > 'A'
Order by ID;
我已尝试使用Union / Union ALL,但似乎无法获得我想要的结果。 谢谢你看这个。
答案 0 :(得分:3)
您可以使用多个键执行此操作:
order by (case when regexp_like(id, '^[0-9]+$') then 1 else 2 end),
(case when regexp_like(id, '^[0-9]+$') then cast(id as int) end),
id
这说:
id
是数字,请将其放在首位。id
是数字,则按数字排序。id
本身作为字符串排序。