SUBSTRING() 関数とLEN() 関数でバイナリ値を16進数に変換する方法
T-SQLでバイナリ値を16進数として表示する方法
CONVERT() 関数は、データ型を変換するために使用できます。 バイナリ値を16進数に変換するには、次のような構文を使用します。
SELECT CONVERT(binary_value, SQL_VARIANT, 2)
binary_value
: 変換するバイナリ値SQL_VARIANT
: 変換後のデータ型。この場合は、SQL_VARIANT を指定します。2
: 16進数を表す数値
例:
SELECT CONVERT(0xABCDEF, SQL_VARIANT, 2);
この例では、バイナリ値 0xABCDEF
が16進数 ABCDEF
として表示されます。
SELECT (
SELECT binary_value
FOR XML PATH('')
)
SELECT (
SELECT 0xABCDEF
FOR XML PATH('')
);
SUBSTRING() 関数とLEN() 関数を使用する
SUBSTRING() 関数は、文字列の一部を抽出するために使用できます。 LEN() 関数は、文字列の長さを取得するために使用できます。 バイナリ値を16進数として表示するには、次のような構文を使用します。
DECLARE @hex VARCHAR(MAX)
SET @hex = ''
SELECT @hex = @hex + SUBSTRING(CONVERT(binary_value, VARCHAR(MAX)), LEN(CONVERT(binary_value, VARCHAR(MAX))) - 1, 2)
FROM (
SELECT binary_value
) AS t
SELECT @hex
DECLARE @hex VARCHAR(MAX)
SET @hex = ''
SELECT @hex = @hex + SUBSTRING(CONVERT(0xABCDEF, VARCHAR(MAX)), LEN(CONVERT(0xABCDEF, VARCHAR(MAX))) - 1, 2)
FROM (
SELECT 0xABCDEF
) AS t
SELECT @hex;
- CONVERT() 関数は、最もシンプルで使いやすい方法です。
- FOR XML PATH() 関数は、他の方法よりも効率的な場合があります。
-- CONVERT() 関数を使用する
SELECT CONVERT(0xABCDEF, SQL_VARIANT, 2);
-- FOR XML PATH() 関数を使用する
SELECT (
SELECT 0xABCDEF
FOR XML PATH('')
);
-- SUBSTRING() 関数とLEN() 関数を使用する
DECLARE @hex VARCHAR(MAX)
SET @hex = ''
SELECT @hex = @hex + SUBSTRING(CONVERT(0xABCDEF, VARCHAR(MAX)), LEN(CONVERT(0xABCDEF, VARCHAR(MAX))) - 1, 2)
FROM (
SELECT 0xABCDEF
) AS t
SELECT @hex;
このコードを実行すると、次の結果が表示されます。
ABCDEF
ABCDEF
ABCDEF
出力
-- CONVERT() 関数を使用する
ABCDEF
-- FOR XML PATH() 関数を使用する
ABCDEF
-- SUBSTRING() 関数とLEN() 関数を使用する
ABCDEF
説明
このサンプルコードでは、3つの異なる方法を使用してバイナリ値を16進数として表示しています。
SELECT CONVERT(binary_value, SQL_VARIANT, 2)
SELECT (
SELECT binary_value
FOR XML PATH('')
)
DECLARE @hex VARCHAR(MAX)
SET @hex = ''
SELECT @hex = @hex + SUBSTRING(CONVERT(binary_value, VARCHAR(MAX)), LEN(CONVERT(binary_value, VARCHAR(MAX))) - 1, 2)
FROM (
SELECT binary_value
) AS t
SELECT @hex
このサンプルコードは、T-SQLでバイナリ値を16進数として表示する方法を示しています。 どの方法を使用するかは、状況によって異なります。
T-SQLでバイナリ値を16進数として表示するその他の方法
SELECT FORMAT(binary_value, 'X')
SELECT FORMAT(0xABCDEF, 'X');
DECLARE @hex VARCHAR(MAX)
SET @hex = RIGHT(CONVERT(binary_value, VARCHAR(MAX)), LEN(CONVERT(binary_value, VARCHAR(MAX))) / 2)
SELECT @hex
DECLARE @hex VARCHAR(MAX)
SET @hex = RIGHT(CONVERT(0xABCDEF, VARCHAR(MAX)), LEN(CONVERT(0xABCDEF, VARCHAR(MAX))) / 2)
SELECT @hex;
CLR を使用する
CLR (Common Language Runtime) を使用して、バイナリ値を16進数に変換することもできます。 以下に、C# を使用した例を示します。
using System;
using System.Data.SqlClient;
public class Program
{
public static void Main(string[] args)
{
// SqlConnection オブジェクトを作成します。
using (var connection = new SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=True"))
{
// SqlCommand オブジェクトを作成します。
using (var command = new SqlCommand("SELECT 0xABCDEF", connection))
{
// SqlCommand オブジェクトを実行します。
connection.Open();
var reader = command.ExecuteReader();
// 結果を読み取ります。
while (reader.Read())
{
// バイナリ値を16進数に変換します。
var hex = BitConverter.ToString((byte[])reader[0]);
// 16進数を出力します。
Console.WriteLine(hex);
}
}
}
}
}
AB-CD-EF
sql-server t-sql