2012年1月12日木曜日

10進数から16進数に変換するSQL

確認した環境は SQL Server2008
master.sys.fn_varbintohexsubstring(0,convert(varbinary,<任意の数値>),1,0)
fn_varbintohexsubstringはドキュメントレスなプロシージャのようでMSDNでの情報が無い。
プロシージャの仕様を確認するのには
sp_helptext 'fn_varbintohexsubstring'
SQL Serverのバージョンによって利用できるプロシージャ名が異なるので注意。
  • SQL7:master.dbo.xp_varbintohexstr
  • SQL2000:master.dbo.fn_varbintohexstr / master.dbo.fn_varbintohexsubstring
  • SQL2005:master.sys.fn_varbintohexstr / master.sys.fn_varbintohexsubstring
参考にさせて頂いたサイト:開発リソース/SQLServer/SHA1ハッシュを生成する方法 - isla-plata.org Wiki



 最初、ぐぐって Stigma - in the public_enemy - [SQL] SQLServer - 10進数→16進数変換 を参考にさせて頂こうとしたけど、 このページで紹介されているやり方だと16進で2桁までしか対応していないようで、採用しませんでした。 以下、比較
declare @var bigint;
set @var = 15
print 'convert dec to hex : ' + convert(varchar,@var)
print STUFF((master.dbo.fn_varbintohexstr(cast(cast(@var as bigint) as binary(1))) COLLATE Latin1_General_CI_AS_KS_WS ),1,2,'') 
print master.sys.fn_varbintohexsubstring(0,convert(varbinary,@var),1,0)
set @var = 511
print 'convert dec to hex : ' + convert(varchar,@var)
print STUFF((master.dbo.fn_varbintohexstr(cast(cast(@var as bigint) as binary(1))) COLLATE Latin1_General_CI_AS_KS_WS ),1,2,'') 
print master.sys.fn_varbintohexsubstring(0,convert(varbinary,@var),1,0)
set @var = 65535;   --0xFFFF
print 'convert dec to hex : ' + convert(varchar,@var)
print STUFF((master.dbo.fn_varbintohexstr(cast(cast(@var as bigint) as binary(1))) COLLATE Latin1_General_CI_AS_KS_WS ),1,2,'') 
print master.sys.fn_varbintohexsubstring(0,convert(varbinary,@var),1,0)
set @var = 65536;   --0x1 0000
print 'convert dec to hex : ' + convert(varchar,@var)
print STUFF((master.dbo.fn_varbintohexstr(cast(cast(@var as bigint) as binary(1))) COLLATE Latin1_General_CI_AS_KS_WS ),1,2,'') 
print master.sys.fn_varbintohexsubstring(0,convert(varbinary,@var),1,0)
set @var = 4294967295   --0xFFFF FFFF
print 'convert dec to hex : ' + convert(varchar,@var)
print STUFF((master.dbo.fn_varbintohexstr(cast(cast(@var as bigint) as binary(1))) COLLATE Latin1_General_CI_AS_KS_WS ),1,2,'') 
print master.sys.fn_varbintohexsubstring(0,convert(varbinary,@var),1,0)

0 件のコメント:

コメントを投稿