Výsledkem je, že řetězec "0003f80075177fe6" (VARCHAR
hodnota) se převede na kódové body a tyto kódové body se zobrazí jako binární hodnota. Protože pravděpodobně používáte řazení kompatibilní s ASCII, znamená to, že získáte body kódu ASCII:0
je 48 (30 hex), f
je 102 (66 hex) a tak dále. To vysvětluje 30 30 30 33 66 38 30 30...
Místo toho chcete analyzovat řetězec jako hexadecimální reprezentaci bajtů (00 03 f8 00 75 71 77 fe 66
). CONVERT
přijímá další parametr „style“, který vám umožňuje převádět hexadecimální řetězce:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Styl 2 převede hexadecimální řetězec na binární. (Styl 1 dělá totéž pro řetězce začínající "0x", což není tento případ.)
Všimněte si, že pokud je méně než 16 bajtů (jako v tomto případě), je hodnota doplněna nulami (0x0003F80075177FE60000000000000000
). Pokud místo toho potřebujete vycpávku vlevo, musíte to udělat sami:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
Nakonec si uvědomte, že binární literály lze zadat bez převodu jednoduše tím, že jim předponu „0x“ a nepoužíváte uvozovky:SELECT 0x0003f80075177fe6
vrátí sloupec typu BINARY(8)
. Pro tento dotaz to není relevantní, ale jen pro úplnost.