mysql 10进制与35进制之间的转换 注意Power处理bigint的问题
35进制的目的是防止0和O造成的视觉误差
BEGIN
DECLARE m_StrHex35 VARCHAR(100); -- 返回35进制表示的结果
DECLARE m_Remainder BIGINT; -- 余数
DECLARE m_Base35 VARCHAR(1);
SET m_Remainder=0;
SET m_StrHex35='';
WHILE p_Hex10>=35 DO
SET m_Remainder=p_Hex10%35;
SET p_Hex10=(p_Hex10-m_Remainder)/35;
SET m_Base35=SUBSTRING('0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ',m_Remainder+1,1);
SET m_StrHex35=CONCAT(m_Base35,m_StrHex35);
END WHILE;
SET m_Remainder=p_Hex10%35;
SET m_Base35=SUBSTRING('0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ',m_Remainder+1,1);
SET m_StrHex35=CONCAT(m_Base35,m_StrHex35);
-- PRINT @StrHex35
RETURN m_StrHex35;
END
BEGIN
DECLARE m_StrHex35Len INT ; -- 被转换35进制字串的长度
DECLARE m_Base35To10 INT ; -- 每位35进制基数对应的10进制数据大小
DECLARE m_Index INT ; -- 字符串索引
DECLARE m_Hex10 BIGINT ; -- 被返回10进制数据
DECLARE m_Base35 VARCHAR(1) ; -- 35进制基数
DECLARE m_Middle_Data BIGINT;
SET m_Hex10=0;
SET m_StrHex35Len=LENGTH(p_StrHex35);
SET m_Index=1;
WHILE (m_Index<=m_StrHex35Len) DO
SET m_Base35=SUBSTR(p_StrHex35 from m_Index for 1);
SET m_Base35To10= LOCATE(m_Base35,'0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ') - 1;
-- 注意:这里必须先把Power的值保存到一个变量,不能计算的结果直接乘一个另外的变量,这样会造成计算结果不正确
SET m_Middle_Data = POWER(35,m_StrHex35Len-m_Index);
SET m_Hex10=m_Hex10+m_Base35To10 * m_Middle_Data;
SET m_Index=m_Index+1;
END WHILE;
RETURN m_Hex10;
END
最新文章
- 解决:PADS导入.DXF结构图出现坐标超出范围问题
- μC/OS-Ⅲ系统的时间管理函数和定时器
- C# Math
- iframe自适应高度(兼容IE 火狐 谷歌)
- `cocos2dx非完整` 日志模块 增量更新
- codevs 1218 疫情控制
- (转载)Cocos2dx-OpenGL ES 2.0教程:你的第一个三角形(1)
- Android中使用HTTP服务
- angularjs从零开始(一)
- linux-more
- Code Kata:超级偶数数列 javascript实现
- iOS pch文件创建使用,和info.plis文件路径改变,路径的设置
- [Swift]LeetCode988. 从叶结点开始的最小字符串 | Smallest String Starting From Leaf
- Python知识点小记
- plsql远程访问数据库 解决ora-12541:TNS:无监听程序
- 第十章&#160;优先级队列 (c)堆排序
- Debug 路漫漫-06
- php脚本输出js代码不执行的解决办法和原理。
- 特征选择实践---python
- VHDL语言实现的任意整数分频器