愚蠢的问题,但我找不到合理的答案。
我需要订购一个包含十六进制值的字段,例如:
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
我怎样才能做到这一点?
这些是十六进制数字吗?最大字母是F吗?然后将十六进制转换为十进制:
select str
from t
order by to_number(str,'XXXXXXXXXXXX');
编辑:愚蠢的我。标题说它是十六进制数字:P 所以这个解决方案应该适合你。
您必须进一步澄清您想要实现的目标,但一般来说,您可以在该列上对表格进行排序,第一行是具有最小值的行:
SELECT * FROM mytable ORDER BY mycolumn
如果您只想要一条记录:
SELECT * FROM mytable ORDER BY mycolumn WHERE rownum = 1
您可以尝试类似 try_convert() 的方法,以防转换失败。
SELECT * FROM table_name ORDER BY TRY_CONVERT(VARBINARY, column_name) ASC;
希望这有帮助!
您可以尝试类似
NLSSORT()
的方法,这解决了我的问题。
select * from mytable order by NLSSORT(your_column , 'NLS_SORT=BINARY'))