激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQL Server中實現二進制與字符類型之間的數據轉換

SQL Server中實現二進制與字符類型之間的數據轉換

2019-12-24 14:31xugang的博客 Sql Server

在SQL Server 數據庫中,如何實現二進制數據與字符串數據之間的直接轉換

在工控應用上,返回的數據經常會以二進制的形成存儲,而這些二進制數據又是以每4個bit表示一個十六進制的數據內容。解析的時候,往往是一個字節(Byte)占用8個位(bit),高位4bit 表示一個十六進制數據,低位4bit 表示一個十六進制數據。 

問題描述:在SQL Server 數據庫中,如何實現二進制數據與字符串數據之間的直接轉換? 

一定會有人立馬反問我:為什么不在程序中使用 C# 或者 JAVA 或者 C++ 來處理這個業務呢?我的回答是:這個我知道,也已經實現了。但在一些特殊的應用環境和業務需求面前(如:對數據的統計、對數據的分析),我必須這么做! 

SQL Server 數據庫中,實現 varbinary 類型轉換成 varchar 類型 

實現的思路是:

每次取得 varbinary 中一個字節的數據,然后除以16 獲得高位的4bit數據,再模16獲得低位的4bit數據;分別從固定字符串中以下標的形式匹配對應的字符,最后累加起來即可。 
代碼如下: 

復制代碼代碼如下:


--============================================== 
-- FUNCTION varbin2hexstr 
-- 將 varbinary 類型的數據轉換為 varchar 類型 
--============================================== 
IF OBJECT_ID ('dbo.varbin2hexstr') IS NOT NULL 
DROP FUNCTION dbo.varbin2hexstr 
GO 
CREATE function 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 


測試示例: 

select dbo.varbin2hexstr(0x1432fabcdef1234567890) 

SQL Server 數據庫中,實現 varchar 類型轉換成 varbinary 類型 
一定會有人立馬想到:既然已經實現了varbinary 類型轉換成 varchar 類型,接下來需要做的,只是將函數逆向反轉實現便可。但實現也并非如此!實現的思路是: 
先將整個字符串按照每兩位分組; 
為什么不按照每8位或每4位進行分組?是為了考慮到函數的通用性。 
如果按照每 8位 或者 每4位 分組,則整個字符串必須是8或者4的倍數,否則將出現字符不足,前面補 0的情況。 
然后對每個字符進行處理,如:字符“A B C D E F” 對應轉換為“10 11 12 13 14 15”; 
接著對每2個字符進行 16 的冪運算,并求和。如: AB = 10 * 16的一次方 + 11 * 16的零次方; 
再將這個2個字符的整數和,轉換為一個字節(Byte)長度的 varbinary 數據; 
最后將所有的 varbinary 數據直接相加即可。 

代碼如下: 

復制代碼代碼如下:


--============================================== 
-- FUNCTION hexstr2varbin 
-- 將 varchar 類型的數據轉換為 varbinary 類型 
--============================================== 
IF OBJECT_ID ('dbo.hexstr2varbin') IS NOT NULL 
DROP FUNCTION dbo.hexstr2varbin 
GO 
CREATE function [dbo].[hexstr2varbin]( 
@char varchar(8000) 
)returns varbinary(8000) 
as 
begin 
declare @re varbinary(8000), @tempchar varchar(2), 
@getchar varchar(1), @getint int, @n int, @totalint int, 
@i int, @tempint int, @runNum int -- 字符串截取段數 
select @tempchar='',@i=datalength(@char), @re=0x; 
if( @i>0) 
begin 
if ( @i%2 = 0) set @runNum= @i/2 
else set @runNum= @i/2 + 1 
while (@runNum > 0) 
begin 
if(@runNum = 1) set @tempchar = @char 
else set @tempchar = substring(@char, (@runNum-1)*2,2) 
select @n=1,@totalint=0; 
-- 循環處理截取的每個字符串 (這里的字符串長度為2) 
while @n < ( datalength(@tempchar) + 1 ) 
begin 
set @getchar=substring(@tempchar,@n,1); 
-- 將字符轉換為十六進制對應的數字 
select @getint=case 
when @getchar='a' then 10 
when @getchar='b' then 11 
when @getchar='c' then 12 
when @getchar='d' then 13 
when @getchar='e' then 14 
when @getchar='f' then 15 
else convert(int,@getchar) end; 
set @tempint=@getint*power(16,datalength(@tempchar)-@n) 
set @totalint = @totalint + @tempint 
set @n=@n+1 
end 
set @re=convert(varbinary(1),@totalint) + @re; 
set @runNum=@runNum-1; 
end 
end 
return @re 
end 
GO 


測試示例: 

復制代碼代碼如下:


select dbo.hexstr2varbin('ffffff2353f5feefaffae1fff1ffbaf1faffa33333333ff3aaafffffffaaff') 


(完) 

本文出自 “xugang” 博客,請務必保留此出處http://guangrou.blog.51cto.com/404164/1040606

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 97中文字幕在线观看 | 性明星video另类hd | 美国av片在线观看 | 欧美一区二区三区四区电影 | 久久噜噜噜精品国产亚洲综合 | 99综合视频 | 日韩精品久久久久久久电影99爱 | 成人三级免费电影 | 久久免费视频精品 | 久久3p视频| 九色在线78m | 久久国产精品久久久久久久久久 | 国产91丝袜在线熟 | 欧美一级做一级爱a做片性 毛片电影网址 | 成人在线视频一区 | 色中色激情影院 | 中文字幕在线观看www | 暖暖免费观看高清完整版电影 | 黄色网址在线免费播放 | 日韩视频在线观看免费视频 | 美国av片在线观看 | 青草视频在线观看视频 | 成人午夜视频免费看 | 黄色片在线播放 | 斗破苍穹在线观看免费完整观看 | 一级成人在线 | 成人免费在线观看视频 | 免费视频99| 国产一级www | 黄色视频一级毛片 | 超碰人人做人人爱 | 久久欧美亚洲另类专区91大神 | 日本网站在线看 | 欧美顶级毛片在线播放小说 | 性欧美xxxx极品摘花 | 精品一区二区三区在线观看视频 | 毛片在线视频观看 | 羞羞的视频免费在线观看 | av在线播放免费观看 | 视频一区二区精品 | 国产一级二级在线播放 |