Pun*_*wah 0 sql database oracle type-conversion oracle11g
注意:我无法更改列的数据类型
我想将一个字符存储到一个具有数字数据类型的列的表中.
我找到的工作是将字符值转换为ASCII,并从数据库中检索它时将其转换回字符.
我使用了几个函数ASCII和ASCIISTR,但这些函数的限制是它们只转换字符串的第一个字符.
所以我用了dump函数
select dump('Puneet_kushwah1') from dual;
结果:Typ = 96 Len = 15:80,117,110,101,101,116,95,107,117,115,104,119,97,104,49
此函数给出所有字符的ASCII值.然后我执行下面的查询
select replace(substr((DUMP('Puneet_kushwah1')),(instr(DUMP('Puneet_kushwah1'),':')+2 )),',',' ') from dual;
结果:80 117 110 101 101 116 95 107 117 115 104 119 97 104 49
然后我用一个特殊字符来填充空间,这样我就可以在从数据库中检索时替换它.
select replace(substr((DUMP('Puneet_kushwah1')),(instr(DUMP('Puneet_kushwah1'),':')+2 )),',','040') from dual;
Result: 80040117040110040101040101040116040950401070401170401150401040401190409704010404049
表定义:
create table test (no number);  
然后我把它插入表中
INSERT into test SELECT replace(substr((DUMP('Puneet_kushwah1')),(instr(DUMP('Puneet_kushwah1'),':')+2 )),',','040') from dual;
问题1:当我执行时
select * from test;
我有
结果:8.004011704011E82
我想把它转换成数字.与我插入的完全相同.
问题2:
然后当我执行select时,我希望它返回确切的字符串.
请帮我尝试了很多功能.
提前致谢.
您无法获得确切的字符串,因为Oracle数字最多只能存储38位精度.
所以如果你运行这个:
select cast(no as varchar2(100))
from test;
你会得到:
80040117040110040101040101040116040950400000000000000000000000000000000000000000000