将base32转换为十进制数
Converting base32 to a decimal number
有谁能帮我把base32值转换成十进制数吗?
我有一个 sql 语句,它 return 给我一个 base32 值列表。例如 select 的 return 看起来像这样:
5
8
H
13r
现在我需要找出这些值中哪个值最高(在本例中为 13r)。因此我需要一个函数来将这些 base32 值转换为十进制数以便对它们进行排序。
有人有这样的功能或者有人有不同的方法吗?
会有点棘手。
您可以创建一个 function
,它将每个 character/digit 与原始 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;
干杯!!
有谁能帮我把base32值转换成十进制数吗? 我有一个 sql 语句,它 return 给我一个 base32 值列表。例如 select 的 return 看起来像这样:
5
8
H
13r
现在我需要找出这些值中哪个值最高(在本例中为 13r)。因此我需要一个函数来将这些 base32 值转换为十进制数以便对它们进行排序。 有人有这样的功能或者有人有不同的方法吗?
会有点棘手。
您可以创建一个 function
,它将每个 character/digit 与原始 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;
干杯!!