对具有相同列中的字​​符和数字的列的问题排序

时间:2017-10-25 07:38:56

标签: oracle sql-order-by

我的表中有一列有两种类型的值字符和数字。我想按升序显示数字而不是字符的降序。我试着在下面使用:

order by case when substr(employe_info,1,1) between '0' and '9' then 1 else 2 end,
employe_info

但它使数字和字符的顺序相同(asc或desc)。

请协助

table name: test_1
columns : id number(10) , 
          employe_info (varchar 50)

数据:

id     employe_info
1      123
2      x
3      y
4      z
5      678
6      265
8      a
9      1020

期望的输出:

id   employe_info
1    123
6    265
5    678
9    1020
4    z
3    y
2    x
8    a

1 个答案:

答案 0 :(得分:0)

如果您希望在特定位置输出订单,很难实现此类ordering,但您可以使用decode并按以下方式实现此目的:

 SELECT *
    FROM test1
ORDER BY DECODE (SUBSTR (employe_info, 1, 1),
                 '0', 1,
                 '1', 1,
                 '2', 1,
                 '3', 1,
                 '4', 1,
                 '5', 1,
                 '6', 1,
                 '7', 1,
                 '8', 1,
                 '9', 1,
                 'z', 2,
                 'y', 3,
                 'x', 4,
                  --Add here more alphabet as per your desired position
                 5);

注意:此解决方案根据提供的数据集。如果您添加更多数据,则需要extend解码中alphabet的位置。