sql >> Base de Datos >  >> RDS >> Sqlserver

Convierta un BINARIO almacenado como VARCHAR a BINARIO

El resultado que obtienes es porque la cadena "0003f80075177fe6" (un VARCHAR valor) se convierte en puntos de código, y estos puntos de código se sirven como un valor binario. Dado que probablemente esté utilizando una intercalación compatible con ASCII, eso significa que obtiene los puntos de código ASCII:0 es 48 (30 hexadecimal), f es 102 (66 hex) y así sucesivamente. Esto explica el 30 30 30 33 66 38 30 30...

En cambio, lo que desea hacer es analizar la cadena como una representación hexadecimal de los bytes (00 03 f8 00 75 71 77 fe 66 ). CONVERT acepta un parámetro de "estilo" adicional que le permite convertir cadenas hexadecimales:

SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)

El estilo 2 convierte una cadena hexadecimal en binaria. (El estilo 1 hace lo mismo con las cadenas que comienzan con "0x", que no es el caso aquí).

Tenga en cuenta que si hay menos de 16 bytes (como en este caso), el valor se rellena a la derecha con ceros (0x0003F80075177FE60000000000000000 ). Si lo necesita con relleno izquierdo, debe hacerlo usted mismo:

SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)

Finalmente, tenga en cuenta que los literales binarios se pueden especificar sin conversión simplemente prefijándolos con "0x" y sin usar comillas:SELECT 0x0003f80075177fe6 devolverá una columna de tipo BINARY(8) . No es relevante para esta consulta, pero solo para completar.