SQL SERVER 16進位與10進位轉換

來源:互聯網
上載者:User

最近工控項目中遇到的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 bigintbegin declare @result bigint set @result=CONVERT(bigint, CONVERT(varbinary, CAST(N'0x' + @s AS char), 1))--最簡單有效方法 return @resultEND       GO

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

CREATE   function [dbo].[inttohex](@num bigint) returns varchar(16)  begindeclare @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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.