Hasil yang Anda dapatkan adalah karena string "0003f80075177fe6" (sebuah VARCHAR
value) dikonversi ke poin kode, dan poin kode ini disajikan sebagai nilai biner. Karena Anda mungkin menggunakan susunan yang kompatibel dengan ASCII, itu berarti Anda mendapatkan poin kode ASCII:0
adalah 48 (30 hex), f
adalah 102 (66 hex) dan seterusnya. Ini menjelaskan 30 30 30 33 66 38 30 30...
Yang ingin Anda lakukan adalah mengurai string sebagai representasi heksadesimal dari byte (00 03 f8 00 75 71 77 fe 66
). CONVERT
menerima parameter "gaya" tambahan yang memungkinkan Anda mengonversi hexstring:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Gaya 2 mengonversi hexstring menjadi biner. (Gaya 1 melakukan hal yang sama untuk string yang dimulai dengan "0x", yang tidak terjadi di sini.)
Perhatikan bahwa jika ada kurang dari 16 byte (seperti dalam kasus ini), nilainya diisi dengan nol (0x0003F80075177FE60000000000000000
). Jika Anda membutuhkannya dengan bantalan kiri, Anda harus melakukannya sendiri:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
Terakhir, perhatikan bahwa literal biner dapat ditentukan tanpa konversi hanya dengan mengawalinya dengan "0x" dan tidak menggunakan tanda kutip:SELECT 0x0003f80075177fe6
akan mengembalikan kolom tipe BINARY(8)
. Tidak relevan untuk kueri ini, tetapi hanya untuk kelengkapan.