Oracle中通过函数实现二、八、十、十六进制任意转换
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,说明:本文主要参考于: http://www.eygle.com/archives/2004/06/oracle_howto_convert.html一、先创建两个基本的进制转换函数:1.其他进制(2
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
人民日报数据库怎么找
吉林现代软件开发产业
云计算和网络安全有关吗
用服务器做电脑主机
信息网络安全组织机构
405服务器错误多久解决
郑州科技馆网络安全
四川省国家网络安全局
医疗大数据网络安全
网络安全审查重点审查什么
南京海航软件开发问答知识
实时数据库的主要技术规范
数据库连接配置怎么看
网络安全pPT开题10分钟
网络安全服务应当符合
最强互联网科技
滴滴 网络安全法
网络安全攻防培训心得
传奇世界服务器技术
服务器堵塞会造成什么后果
vba生成百万行数据库
中小学网络安全说说
高斯数据库磁盘不足
网络安全研究生要学些什么
小学校园网络安全周活动剪影
服务器进入磁阵管理界面
access数据库or
上海智能软件开发流程
大学生网络安全 ppt
海康威视存储服务器功耗