如何附加不同格式的列

时间:2018-03-15 21:03:55

标签: sql oracle

我正在使用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,但似乎无法获得我想要的结果。 谢谢你看这个。

1 个答案:

答案 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本身作为字符串排序。