mysql 10 进制 转36_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值