Oracle中通过函数实现二、八、十、十六进制任意转换
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,说明:本文主要参考于: http://www.eygle.com/archives/2004/06/oracle_howto_convert.html一、先创建两个基本的进制转换函数:1.其他进制(2
千家信息网最后更新 2026年11月02日Oracle中通过函数实现二、八、十、十六进制任意转换
说明:本文主要参考于: http://www.eygle.com/archives/2004/06/oracle_howto_convert.html
一、先创建两个基本的进制转换函数:
1.其他进制(2,8,16)转换为十进制
Create Or Replace Function To_Dec(p_Str In Varchar2, --要转换的数字(2,8,16进制) p_From_Base In Number Default 16) --转换前的进制 Return Number Is i_Num Number Default 0; i_Hex Varchar2(16) Default '0123456789ABCDEF'; Begin For i In 1 .. Length(p_Str) Loop i_Num := i_Num * p_From_Base + Instr(i_Hex, Upper(Substr(p_Str, i, 1))) - 1; End Loop; Return i_Num; End To_Dec;
2.十进制转换为其它进制(2,8,16)
Create Or Replace Function To_Base(p_Dec In Number, --要转换的数字(10进制) p_Base In Number) --转换后的进制 Return Varchar2 Is i_Str Varchar2(255) Default Null; i_Num Number Default p_Dec; i_Hex Varchar2(16) Default '0123456789ABCDEF'; Begin If Trunc(p_Dec) <> p_Dec Or p_Dec < 0 Then Raise Program_Error; End If; Loop i_Str := Substr(i_Hex, Mod(i_Num, p_Base) + 1, 1) || i_Str; i_Num := Trunc(i_Num / p_Base); Exit When i_Num = 0; End Loop; Return i_Str; End To_Base;
二、通过上面两个函数,可以将10进制作为转换的中间桥梁。在进行任意进制转换时,都可以先将要转换的进制转为10进 制,然后再通过10进制转换为别的进制。 通过下面函数来实现:
Create Or Replace Function Bodh_Convert(p_Str In Varchar2, --要转换的数字(2,8,10,16进制) p_From Number, --转换前的进制 p_To Number) --转换后的进制 Return Varchar2 Is v_Temp Number Default 0; v_Num Varchar2(128) Default Null; Begin If p_From = 2 Then If p_To = 8 Then v_Temp := To_Dec(p_Str, p_From); v_Num := To_Base(v_Temp, p_To); Elsif p_To = 10 Then v_Num := To_Dec(p_Str, p_From); Elsif p_To = 16 Then v_Temp := To_Dec(p_Str, p_From); v_Num := To_Base(v_Temp, p_To); End If; Elsif p_From = 8 Then If p_To = 2 Then v_Temp := To_Dec(p_Str, p_From); v_Num := To_Base(v_Temp, p_To); Elsif p_To = 10 Then v_Num := To_Dec(p_Str, p_From); Elsif p_To = 16 Then v_Temp := To_Dec(p_Str, p_From); v_Num := To_Base(v_Temp, p_To); End If; Elsif p_From = 10 Then If p_To = 2 Then v_Num := To_Base(To_Number(p_Str), p_To); Elsif p_To = 8 Then v_Num := To_Base(To_Number(p_Str), p_To); Elsif p_To = 16 Then v_Num := To_Base(To_Number(p_Str), p_To); End If; Elsif p_From = 16 Then If p_To = 2 Then v_Temp := To_Dec(p_Str, p_From); v_Num := To_Base(v_Temp, p_To); Elsif p_To = 8 Then v_Temp := To_Dec(p_Str, p_From); v_Num := To_Base(v_Temp, p_To); Elsif p_To = 10 Then v_Num := To_Dec(p_Str, p_From); End If; End If; Return v_Num; Exception When Others Then Dbms_Output.Put_Line('请输入正确的参数'); End Bodh_Convert;三、示例:
SQL> select bodh_convert('1111',2,8) from dual; --2进制转8进制 BODH_CONVERT('1111',2,8) -------------------------------------------------------------------------------- 17 SQL> select bodh_convert('1111',2,10) from dual; --2进制转10进制 BODH_CONVERT('1111',2,10) -------------------------------------------------------------------------------- 15 SQL> select bodh_convert('1111',2,16) from dual; --2进制转16进制 BODH_CONVERT('1111',2,16) -------------------------------------------------------------------------------- F
进制
函数
数字
两个
十进制
十进
参数
桥梁
示例
先将
参考
输入
十六进制
中通
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海睿民互联网科技有限公司
互联网科技公司经营范围
重生之互联网科技帝国
易互联网科技有限公司
宜安科技 互联网金融
互联网科技缩写
上游互联网科技
掌上梦互联网科技
互联网科技公司有哪些
字节跳动和互联网科技
现代互联网科技股
未来五年的互联网科技
燊美集互联网科技有限公司
迪庆互联网科技招生
洛阳共同富裕互联网科技有限公司
互联网金融科技名词解释
互联网科技圈年度人物
黑云互联网科技有限公司
宁波跨境商互联网科技有限公司
数字互联网科技有限公司
中智农互联网科技
高科技互联网
互联网和科技创新
互联网科技的英文
互联网科技论文
上海万想互联网科技
安控科技rtu产品工业互联网
广西互联网科技孵化中心
互联网营销推广黑科技
富国互联网科技002692