Otrzymany wynik jest taki, że ciąg "0003f80075177fe6" (VARCHAR
wartość) jest konwertowana na punkty kodowe, a te punkty kodowe są podawane jako wartość binarna. Ponieważ prawdopodobnie używasz sortowania zgodnego z ASCII, oznacza to, że otrzymujesz punkty kodowe ASCII:0
to 48 (30 szesnastkowych), f
to 102 (66 hex) i tak dalej. To wyjaśnia 30 30 30 33 66 38 30 30...
Zamiast tego chcesz przeanalizować ciąg znaków jako szesnastkową reprezentację bajtów (00 03 f8 00 75 71 77 fe 66
). CONVERT
akceptuje dodatkowy parametr „style”, który umożliwia konwersję ciągów heksadecymalnych:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Styl 2 konwertuje ciąg heksadecymalny na binarny. (Styl 1 robi to samo dla ciągów zaczynających się od „0x”, co nie ma miejsca w tym przypadku).
Zauważ, że jeśli jest mniej niż 16 bajtów (jak w tym przypadku), wartość jest dopełniana zerami z prawej strony (0x0003F80075177FE60000000000000000
). Jeśli potrzebujesz go z wyściółką lewą, musisz to zrobić sam:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
Na koniec zauważ, że literały binarne można określić bez konwersji, po prostu poprzedzając je „0x” i nie używając cudzysłowów:SELECT 0x0003f80075177fe6
zwróci kolumnę typu BINARY(8)
. Nie dotyczy tego zapytania, ale tylko dla kompletności.