我的表中有一列有两种类型的值字符和数字。我想按升序显示数字而不是字符的降序。我试着在下面使用:
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
答案 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
的位置。