Resultatet du får beror på att strängen "0003f80075177fe6" (en VARCHAR
värde) konverteras till kodpunkter, och dessa kodpunkter serveras som ett binärt värde. Eftersom du förmodligen använder en ASCII-kompatibel sortering betyder det att du får ASCII-kodpunkterna:0
är 48 (30 hex), f
är 102 (66 hex) och så vidare. Detta förklarar 30 30 30 33 66 38 30 30...
Vad du istället vill göra är att analysera strängen som en hexadecimal representation av byte (00 03 f8 00 75 71 77 fe 66
). CONVERT
accepterar en extra "stil"-parameter som låter dig konvertera hexsträngar:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Stil 2 konverterar en hexsträng till binär. (Stil 1 gör samma sak för strängar som börjar med "0x", vilket inte är fallet här.)
Observera att om det finns mindre än 16 byte (som i det här fallet), är värdet högerutfyllt med nollor (0x0003F80075177FE60000000000000000
). Om du istället behöver den vänsterstoppad måste du göra det själv:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
Slutligen, notera att binära bokstaver kan specificeras utan konvertering helt enkelt genom att prefixet dem med "0x" och inte använda citattecken:SELECT 0x0003f80075177fe6
returnerar en kolumn av typen BINARY(8)
. Inte relevant för denna fråga, utan bara för fullständighetens skull.