Резултатът, който получавате, е защото низът "0003f80075177fe6" (a VARCHAR стойност) се преобразува в кодови точки и тези кодови точки се сервират като двоична стойност. Тъй като вероятно използвате ASCII-съвместима колация, това означава, че получавате ASCII кодовите точки:0 е 48 (30 шестнадесетичен), f е 102 (66 шестнадесетичен) и така нататък. Това обяснява 30 30 30 33 66 38 30 30...
Това, което искате да направите вместо това, е да анализирате низа като шестнадесетично представяне на байтовете (00 03 f8 00 75 71 77 fe 66 ). CONVERT
приема допълнителен параметър "стил", който ви позволява да конвертирате шестнадесетични низове:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Стил 2 преобразува шестнадесетичен низ в двоичен. (Стил 1 прави същото за низове, които започват с "0x", което не е случаят тук.)
Имайте предвид, че ако има по-малко от 16 байта (както в този случай), стойността е допълнена отдясно с нули (0x0003F80075177FE60000000000000000 ). Ако вместо това ви трябва ляво подплатено, трябва да го направите сами:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
И накрая, имайте предвид, че двоичните литерали могат да бъдат зададени без преобразуване, просто като им поставите префикс "0x" и не използвате кавички:SELECT 0x0003f80075177fe6 ще върне колона от тип BINARY(8) . Не е от значение за тази заявка, но само за пълнота.