Oracle - 如何将字符串编码为数字并从该数字中检索原始字符串

时间:2017-03-20 09:30:13

标签: sql oracle plsql

我想将字符串编码为数字,并使用其他函数从该数字中检索原始字符串。它只需要支持0到255之间的ascii字符,而不是unicode。数字可以是整数或浮点数。

考虑将ascii值乘以位置和256,然后添加结果,但不确定这是否有效。

字符串的长度最多为240个字符。

预期用途是将字符串值转换为数值以用于机器学习算法;因为许多机器学习算法需要数值而不是字符串值。

2 个答案:

答案 0 :(得分:-1)

function str2num
(
   p_string in varchar2
)  return number is

l_i      number(15);
l_c      number(15);
l_answer number(38);

begin

   l_answer := 0;
   for l_i in 1..length(p_string) loop
      l_c := ascii(substr(p_string, l_i, 1));
      l_answer := l_answer + (l_c * power(2, (l_i - 1) * 8));
   end loop;

   return l_answer;

end str2num;

只能处理52个字符,但足够好。现在的问题是,相反的功能是什么。

答案 1 :(得分:-3)

假设起始位置为1:

ASCII VALUE * 256 ^(位置 - 1)

字符串可以多长时间?数值可能会非常高!

如果您正在谈论的字符串是"有限" (在数量上)和重复的(例如单词或句子)你可以在表格中写入它们(id bigint,descr VARCHAR(240))并使用id作为数字。你觉得怎么样?