SQL Server 进制转换函数

本文介绍了SQL Server中进行进制转换的函数和操作,包括如何将N进制转换为10进制,10进制转换为N进制,以及不同进制之间的相互转换。此外,还探讨了如何进行N进制值的加法运算。
摘要由CSDN通过智能技术生成
  • N 进制转 10 进制

IF EXISTS(SELECT TOP 1 1 FROM [sys].[objects] WHERE object_id =OBJECT_ID(N'[dbo].[f_NBaseToDecimal]') AND type IN(N'FN', N'IF', N'TF', N'FS', N'FT'))
    DROP FUNCTION [dbo].[f_NBaseToDecimal]
GO

/*
    2021-10-13 YiCong.Zhuang Create N 进制转 10 进制
*/
CREATE FUNCTION [dbo].[f_NBaseToDecimal] (
    @NBaseCode  VARCHAR(100) /* N 进制码,如 16 进制为 '0123456789ABCDEF',34 进制为 '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ'。也可以自定义,如 'ABC' */
  , @NBaseValue VARCHAR(100) /* N 进制值 */
)
RETURNS BIGINT
AS
BEGIN
    DECLARE
        @Return BIGINT = 0
      , @BaseCodeLen BIGINT = LEN(@NBaseCode) /* 进制码长度,即计算出是多少进制 */ /* 这里类型也要用 BIGINT,因为 POWER 返回值的类型与第一个参数类型相同 */
      , @idx INT = 0 /* 第 i 位 N 进制值 */
      , @BaseCharIdx INT /* 字符在 N 进制中对应的 10 进制值,如 A 在 16 进制中是 10 */
      , @BaseValueLen INT = LEN(@NBaseValue) /* N 进制值长度,先计算出来,循环判断时直接使用即可 */
    
    /*
        如 16 进制的 75D 转 10 进制的计算过程:
        
        1. 处理数据时从后往前处理,所以先将 16 进制值反转,得 D57
        
        2. 第 1 位 D 在 16 进制中对应的 10 进制值是 13
        3. 13 乘以 16 的 1 -1 次方,此值就是 00D 对应的 10 进制值 13
        
        4. 第 2 位 5 在 16 进制中对应的 10 进制值是 5
        5. 5 乘以 16 的 2 -1 次方,此值就是 050 对应的 10 进制值 80
        
        6. 第 3 位 7 在 16 进制中对应的 10 进制值是 7
        7. 7 乘以 16 的 3 -1 次方,此值就是 700 对应的 10 进制值 1792
        
        8. 把上面得到的各位 10 进制值加起来,便是 16 进制值对应的 10 进制值了:13 +80 +1792 = 1885
    */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值