[SQL Server] バイナリを文字列に変換 / fn_varbintohexstr / varbinary to varchar

inno
2014-07-11 08:23 11364 0
MS-SQL / SQL Server
バイナリを文字列に変換 / fn_varbintohexstr / varbinary to varchar

バイナリを文字列に変更するにはSql Serverにある「dbo.fn_varbintohexstr」関数を利用します。

DECLARE @Str varchar(100)
DECLARE @DataVarbinary varbinary(256)
SET @Str = 'test'
SET @DataVarbinary = HashBytes('MD5', @Str)

SELECT master.dbo.fn_varbintohexstr(@DataVarbinary) AS [Result], @DataVarbinary AS [VarbinaryData]

実行結果


上記のSQLを説明すると、
文字列「test」をMD5にハッシュしたVarninary値を「dbo.fn_varbintohexstr」を利用して文字列に変更します。
だが、よく見ると結果が少し違います。
「dbo.fn_varbintohexstr」を利用するとすべての文字が小文字に返されています。

見た目をVarbinary値と同じくしたい場合は下記のSQLのようにしてください。

DECLARE @Str varchar(100)
DECLARE @DataVarbinary varbinary(256)
SET @Str = 'test'
SET @DataVarbinary = HashBytes('MD5', @Str)

SELECT STUFF(UPPER(master.dbo.fn_varbintohexstr(@DataVarbinary)), 2,1,'x') AS [Result], @DataVarbinary AS [VarbinaryData]

実行結果


「STUFF」と「UPPER」を利用してVarbinary値と同じく文字列を返すことができます。

ちなみに、文字列バイナリにする方法はSQL Serverから作成されている関数がないので、
dbo.fn_hexstrtovarbin」という関数を作成して利用することができます。
文字列バイナリにする方法(dbo.fn_hexstrtovarbin)については下記のリンクをクリックしてください。


コメント