Resultatet, du får, skyldes, at strengen "0003f80075177fe6" (en VARCHAR
værdi) konverteres til kodepunkter, og disse kodepunkter serveres som en binær værdi. Da du sandsynligvis bruger en ASCII-kompatibel sortering, betyder det, at du får ASCII-kodepunkterne:0
er 48 (30 hex), f
er 102 (66 hex) og så videre. Dette forklarer 30 30 30 33 66 38 30 30...
Det, du vil gøre i stedet, er at analysere strengen som en hexadecimal repræsentation af bytes (00 03 f8 00 75 71 77 fe 66
). CONVERT
accepterer en ekstra "stil" parameter, der giver dig mulighed for at konvertere hexstrings:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Style 2 konverterer en hexstring til binær. (Stil 1 gør det samme for strenge, der starter med "0x", hvilket ikke er tilfældet her.)
Bemærk, at hvis der er mindre end 16 bytes (som i dette tilfælde), er værdien højrepolstret med nuller (0x0003F80075177FE60000000000000000
). Hvis du i stedet skal bruge den venstrepolstret, skal du selv gøre det:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
Bemærk endelig, at binære bogstaver kan specificeres uden konvertering blot ved at sætte dem foran med "0x" og ikke bruge anførselstegn:SELECT 0x0003f80075177fe6
returnerer en kolonne af typen BINARY(8)
. Ikke relevant for denne forespørgsel, men bare for fuldstændighedens skyld.