有人可以帮助我将base32值转换为十进制数字吗? 我有一条sql语句,该语句返回一个base32值列表。例如,选择的返回看起来像这样:
5
8
H
13r
现在,我需要找出这些值中的哪个最高(在本例中为13r)。因此,我需要一个函数来将这些base32值转换为十进制数字,以便对其进行排序。 有人有这种功能吗?有人有不同的方法吗?
答案 0 :(得分:0)
有点棘手。
您可以创建一个function
,它将每个字符/数字与原始base32数字分开,并将其与32 ^(base32数字中的位置)相乘以获得十进制等效数字,并在其中使用function
您的查询。
create function convert32todecimal(p_num in varchar2) return number as lv_outnum number; begin select sum(val) into lv_outnum from ( select power(32,pos) * case when d between '0' and '9' then to_number(d) else 10 + ascii(d) - ascii('A') end as val from ( select upper(substr(p_num,length(p_num)+1-level,1)) d, level - 1 as pos from dual connect by level <= length(p_num) ) ); return lv_outnum; end; /
现在,按如下所示在查询中使用此功能:
with your_data(num) as ( select '5' from dual union all select '8' from dual union all select 'H' from dual union all select '13r' from dual ) select num, convert32todecimal(num) from your_data order by 2 desc;
干杯!