gpt4 book ai didi

oracle - 将 0 和 1 的数组转换为 base36 字符串

转载 作者:行者123 更新时间:2023-12-02 08:49:26 25 4
gpt4 key购买 nike

事情是这样的。我有一个 0 和 1 的数组。它应该是一个二进制字符串。我需要的是将其格式化为包含该二进制文件的 base36 转换的字符串。换句话说,我需要这样做:1和0的数组->某种二进制数->转换为base36数字->将其放入字符串中。如何做到这一点?

数千石油,300钢铁和+1幸运给回答者。

最佳答案

没有内置的 Oracle 来执行此类转换。在下面的示例中,我使用 the inestimable Mr Kyte 编写的两个函数。 to_dec() 将其他基数转换为小数,to_base() 将小数转换为其他基数。

该过程接受一个由 1 和 0 组成的数组,并返回一个以 36 为基数的字符串。

create or replace type binary_nt as table of number(1,0);
/

create or replace function base2_to_base36
(p_onesnzeroes in binary_nt)
return varchar2
is
s_b2 varchar2(38);
n_b10 pls_integer;
s_b36 varchar2(38);
begin
for i in 1..p_onesnzeroes.count()
loop
s_b2 := s_b2||trim(to_char(p_onesnzeroes(i)));
end loop;

n_b10 := to_dec(s_b2, 2);
s_b36 := to_base(n_b10, 36);

return s_b36;
end;
/

布丁的证明以及所有这些......

SQL> set serveroutput on size unlimited
SQL> declare
2 bins binary_nt := binary_nt(1,0,0,0,1,1,1,0);
3 s varchar2(128);
4 begin
5 -- 10001110 => 142 => 3Y
6 s := base2_to_base36(bins);
7 dbms_output.put_line(s);
8 end;
9 /
3Y

PL/SQL procedure successfully completed.

SQL>

编辑

当我组装这个示例时,您发布了您的零数组长度约为 450 个条目。这个例程不会处理这样的事情。在您命中该大小的数字之前,它会抛出ORA-01426: numeric Overflow

编辑2

如果您愿意冒险一点不精确,您可以将 NUMBER 变量替换为 BINARY_DOUBLE 变量(在我的示例和 Tom 的函数中)。该数据类型可以处理更大的数字。我将其提高到 array_count=470,在基数 36 中可能如下所示:

EKQA1EJ6QB4SC8WOOWKWGGOS4KWWWWCS4WCW4SCWCOSOOS888K4CSC8SWO8OCKC8SSCWCOGK844CKG00SOW8KGS0CC4

关于oracle - 将 0 和 1 的数组转换为 base36 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com