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

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

文字列をバイナリに変更するにはSql Serverから基本的に支援してくれませんので、
dbo.fn_hexstrtovarbin」関数を作成してから利用できます。

dbo.fn_hexstrtovarbin」関数を作成するSQLは下記のとおりです。

CREATE FUNCTION dbo.fn_hexstrtovarbin
(
@Str varchar(1000)
)
RETURNS varbinary(8000)
AS
BEGIN

DECLARE @RtnVal varbinary(8000)
DECLARE @i int

SET @RtnVal = 0x
SET @i = 2
WHILE (@i <= LEN(@Str)/2)
BEGIN
SET @RtnVal = @RtnVal + 
CONVERT(binary(1), 
CONVERT(tinyint, 
CASE LOWER(SUBSTRING(@Str, @i*2-1, 1))
WHEN '0' THEN 0x00
WHEN '1' THEN 0x10
WHEN '2' THEN 0x20
WHEN '3' THEN 0x30
WHEN '4' THEN 0x40
WHEN '5' THEN 0x50
WHEN '6' THEN 0x60
WHEN '7' THEN 0x70
WHEN '8' THEN 0x80
WHEN '9' THEN 0x90
WHEN 'a' THEN 0xa0
WHEN 'b' THEN 0xb0
WHEN 'c' THEN 0xc0
WHEN 'd' THEN 0xd0
WHEN 'e' THEN 0xe0
WHEN 'f' THEN 0xf0
END
) |
CONVERT(tinyint, 
CASE LOWER(SUBSTRING(@Str, @i*2, 1))
WHEN '0' THEN 0x00
WHEN '1' THEN 0x01
WHEN '2' THEN 0x02
WHEN '3' THEN 0x03
WHEN '4' THEN 0x04
WHEN '5' THEN 0x05
WHEN '6' THEN 0x06
WHEN '7' THEN 0x07
WHEN '8' THEN 0x08
WHEN '9' THEN 0x09
WHEN 'a' THEN 0x0a
WHEN 'b' THEN 0x0b
WHEN 'c' THEN 0x0c
WHEN 'd' THEN 0x0d
WHEN 'e' THEN 0x0e
WHEN 'f' THEN 0x0f
END 
)
)
SET @i = @i + 1
END

  RETURN @RtnVal
END

「dbo.fn_hexstrtovarbin」関数の作成が終わったら下記のSQLを実行して動作確認をしてみましょう~

SELECT '0E0EAA192407164B1C6B309F0595B41A' AS [文字列], dbo.fn_hexstrtovarbin('0E0EAA192407164B1C6B309F0595B41A') AS [バイナリ]
SELECT '0x0E0EAA192407164B1C6B309F0595B41A' AS [文字列], dbo.fn_hexstrtovarbin('0x0E0EAA192407164B1C6B309F0595B41A') AS [バイナリ]
SELECT '0X0E0EAA192407164B1C6B309F0595B41A' AS [文字列], dbo.fn_hexstrtovarbin('0X0E0EAA192407164B1C6B309F0595B41A') AS [バイナリ]
SELECT '0XA1BCDEFG' AS [文字列], dbo.fn_hexstrtovarbin('0XA1BCDEFG') AS [バイナリ]

テストとして4つのSELECT文を準備しました。
4番目は正しくないバイナリデータを準備しました。
それぞれどんな結果が出るのか確認してみましょう。

実行結果


1~3番目まではすべで正常に文字列をバイナリに交換していますね。
4番目の正しくないデータの場合、nullデータを返しています。

ちなみに、バイナリを文字列にする方法はSQL Serverに存在する関数「dbo.fn_varbintohexstr」を利用すればできます。
バイナリを文字列にする方法(dbo.fn_varbintohexstr)については下記のリンクをクリックしてください。


以上、文字列をバイナリに変更する方法でした~~~

コメント