SQLSERVER 16進製制與10進製轉換

2022-02-22 15:02:36 字數 1808 閱讀 2796

最近工控專案中遇到的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'

+@saschar), 1

))--最簡單有效的方法

return

@result

endgo

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

@rend

go

create

function

[dbo

].[varbin2hexstr](

@bin

varbinary(8000

) )

returns

varchar(8000

)

asbegin

declare

@revarchar(8000),@i

intselect

@re=

'',@i

=datalength(@bin

)

while

@i>

0select

@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

@reend

go

以上**測試環境win2003+sqlserver2008

SQLSERVER 16進製制轉10進製

原碼 補碼 反碼參考 進製轉換參考 負數轉換為16進製制 16進製制數 0x7fffffffffffffff 轉化為進製 select convert bigint,cast 0x7fffffffffffffff as varbinary as converted 經驗證 可以直接給bigint 賦...

SQL SERVER(16)高階條件查詢

1 and運算子 select from stu info where depart 數學 and 女 order by sno select from stu info where 出生日期 01 01 1975 and 出生日期 and email is null order by出生日期 2....

16進製制位址進製

16進製制 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 乙個位址表示乙個byte,即8bit 0x8000000033221100 77665544 bbaa9988 ffeeddcc 0x8000001076543210 0x80000000 00000000 0x80000001...