您得到的结果是因为字符串“0003f80075177fe6”(一个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
它将返回type列BINARY(8)
。与该查询无关,只是为了完整性。