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)については下記のリンクをクリックしてください。
以上、文字列をバイナリに変更する方法でした~~~