結果は、文字列 "0003f80075177fe6" (VARCHAR
value) はコード ポイントに変換され、これらのコード ポイントはバイナリ値として提供されます。おそらくASCII互換の照合を使用しているので、ASCIIコードポイントを取得することを意味します:0
は 48 (30 hex)、f
は 102 (66 hex) などです。これは 30 30 30 33 66 38 30 30...
を説明しています
代わりに、文字列をバイトの 16 進数表現として解析します (00 03 f8 00 75 71 77 fe 66
)。 変換
16 進文字列を変換できる追加の「スタイル」パラメーターを受け入れます:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
スタイル 2 は、16 進文字列をバイナリに変換します。 (スタイル 1 は、"0x" で始まる文字列に対して同じことを行いますが、ここではそうではありません。)
(この場合のように) 16 バイト未満の場合、値の右側がゼロで埋められることに注意してください (0x0003F80075177FE6000000000000000
)。代わりに左パディングが必要な場合は、自分で行う必要があります:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
最後に、バイナリ リテラルは、"0x" をプレフィックスとして付け、引用符を使用しないだけで、変換せずに指定できることに注意してください。 タイプ BINARY(8)
の列を返します .このクエリには関係ありませんが、完全を期すためです。