MSSQL 關於16進制與字符串以及10進制的簡單轉換,以及SQL的16進制的截取

  關於數據庫的16進制類型轉換,其實在數據庫裏面沒有16進制這個類型,它用的都是2進制類型varbinary存儲16進制的數據,而這些二進制數據又是以每4個bit表示一個十六進制的數據內容,往往是一個字節(Byte)佔用8個位(bit),高位4bit 表示一個十六進制數據,低位4bit 表示一個十六進制數據。存儲的時候又經常是用10進制存貯的,要切割起來就特別麻煩,那就只能10進制->2進制->字符串切割2進制->10進制。

    接下來,我從網上找到一個比較簡單的轉換方法,首先介紹從varchar數據轉換到varbinary數據的方法,這個方法個人覺得比較巧妙,因爲它用到了SQL Server中的sp_executesql的方法,它可以方便的幫我們解決眼前的問題。解決辦法是這樣的:

	declare @str nvarchar(1000),@a varbinary(500),@sql nvarchar(max)
	set @str=N'0x12abcd'
	set @sql=N'set @p='+@str+N';'
	exec sp_executesql   @sql,
						 N'@p as varbinary(500) output',
						 @p=@a output
	select  @a

  上面的方法不能倒過來用,不過SQL Server提供了我們一個標量函數來解決從varbinay數據到varchar的問題,用法如下:

	declare @bin varbinary(1000)
	set @bin=0x12abcd
	select sys.fn_varbintohexstr(@bin)

  完。

    因爲工作需要,下面是我根據上面這位仁兄寫的,一個把4位的16進制數據,拆分成2個字節的16進制數據,然後轉換爲2個int類型

<p>begin 
declare @num2 varbinary(8),@a nvarchar(50),@b nvarchar(50),@c nvarchar(50),@d varbinary(8),@e varbinary(8)
set @num2=cast(327679 as varbinary(4))--10進制直接轉換爲2進制
set @a = sys.fn_varbintohexstr(@num2)  ---2進制數轉字符串
set @b=SUBSTRING ( @a , 3 , 4 )   ----截取字符串
 set @c=SUBSTRING ( @a , 7 , 4 )   </p><p>set @b=N'set @p='+'0x'+@b+N';'
exec sp_executesql   @b,
       <a target=_blank href="mailto:N'@p">N'@p</a> as varbinary(500) output',
       @p=@d output
set @c=N'set @p='+'0x'+@c+N';'
exec sp_executesql   @c,
       <a target=_blank href="mailto:N'@p">N'@p</a> as varbinary(500) output',
       @p=@e output       
select  @num2,@a,@b,@c,cast(@d as int),cast(@e as int)  ----2進制轉換爲10進制輸出
end </p>

至此,大工告成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章