程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL SERVER 16進制與10進制轉換

SQL SERVER 16進制與10進制轉換

編輯:關於SqlServer

最近工控項目中遇到的16進制與10進制轉換,在.NET中比較容易實現,在SQLSERVER中發現沒有直接 的轉換,尤其是出現超出范圍的long負數,即無符號64位整數在sqlserver中的存儲。網上找的很多方法 只適用於32位整數和64位正整數,64位負數無法實現,現將使用的轉換方法記錄下來。

利用SQLSERVER中的varbinary來間接實現。

16進制字符串轉10進制bigint(0-FFFFFFFFFFFFFFFF):

由於二進制比較容易轉換為bigint 所以先將字符串轉為二進制varbinary,再轉換為10進制

CREATE  function [dbo].[hextoint](@s varchar(16)) 
returns bigint
begin
 declare @result bigint
 set @result=CONVERT(bigint, CONVERT(varbinary, CAST(N'0x' + @s AS char), 1))--最簡單有效的

方法
 return @result
END
       
GO

10進制轉16進制字符串(bigint正負數都可以):相同的思路目前可以將二進制varbinary轉換為字 符串比較容易,那麼先將10進制轉二進制再進行16進制字符串輸出

CREATE   function [dbo].[inttohex](@num bigint) 
returns varchar(16)  
begin
declare @num2 varbinary(8),@r varchar(50)
set @num2=convert(varbinary(8),@num)--直接轉換為二進制
set @r= dbo.varbin2hexstr(@num2)--二進制轉16進制字符串
return @r 
end
       
GO
CREATE function [dbo].[varbin2hexstr](
    @bin varbinary(8000)
    )returns varchar(8000)
    as
    begin
        declare @re varchar(8000),@i int
        select @re='',@i=datalength(@bin)
        while @i>0
            select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
                    +substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
                    +@re
                ,@i=@i-1
       -- return('0x'+@re)
        return @re
    end
           
       
GO

以上代碼測試環境WIN2003+SQLSERVER2008

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved