Oracle:如何对十六进制字段进行排序

问题描述 投票:0回答:4

愚蠢的问题,但我找不到合理的答案。

我需要订购一个包含十六进制值的字段,例如:

select str from
    (
    select '2212A' str from dual union all
    select '2212B'     from dual union all
    select '22129'     from dual union all
    select '22127'     from dual union all
    select '22125'     from dual union all
    select '22126'     from dual
   ) t
   order by str asc;

此请求给出:

STR         
------------
2212A
2212B
22125
22126
22127
22129

我愿意

STR         
------------
22125
22126
22127
22129
2212A
2212B

我怎样才能做到这一点?

sql oracle sql-order-by alphanumeric
4个回答
4
投票

这些是十六进制数字吗?最大字母是F吗?然后将十六进制转换为十进制:

select str
from t
order by to_number(str,'XXXXXXXXXXXX');

编辑:愚蠢的我。标题说它是十六进制数字:P 所以这个解决方案应该适合你。


0
投票

您必须进一步澄清您想要实现的目标,但一般来说,您可以在该列上对表格进行排序,第一行是具有最小值的行:

SELECT * FROM mytable ORDER BY mycolumn

如果您只想要一条记录:

SELECT * FROM mytable ORDER BY mycolumn WHERE rownum = 1

0
投票

您可以尝试类似 try_convert() 的方法,以防转换失败。

SELECT * FROM table_name ORDER BY TRY_CONVERT(VARBINARY, column_name) ASC;

希望这有帮助!


-1
投票

您可以尝试类似

NLSSORT()
的方法,这解决了我的问题。

select * from mytable order by NLSSORT(your_column , 'NLS_SORT=BINARY'))  
© www.soinside.com 2019 - 2024. All rights reserved.