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)については下記のリンクをクリックしてください。