2010-07-20 135 views
62

Cómo convertir un valor de columna de varbinary(max) a varchar en forma legible para los humanos?varbinary a cadena en SQL Server

+3

quiero varchar ya que el valor fue enviado desde el valor de la cadena ... Quiero leer lo que estaba escrito .. – theklc

Respuesta

65

"Conversión de un varbinary a un varchar" puede significar cosas diferentes.

Si el varbinary es la representación binaria de una cadena en SQL Server (por ejemplo devuelto por fundición a varbinary directamente o desde las DecryptByPassPhrase o DECOMPRESS funciones) que sólo puede CAST que

declare @b varbinary(max) 
set @b = 0x5468697320697320612074657374 

select cast(@b as varchar(max)) /*Returns "This is a test"*/ 

Este es el equivalente de usar CONVERT con un parámetro de estilo de 0.

CONVERT(varchar(max), @b, 0) 

Otros parámetros de estilo están disponibles con diferentes requisitos para CONVERT como se ha señalado en otras respuestas.

+20

ESTA RESPUESTA NO ES CORRECTA. Lo probé en la tabla con los SID del usuario: la cantidad de valores fundidos Distinct es menor que la cantidad de SID binarios Distinct. Debería usar CONVERT (VARCHAR (...), binaryValue, 2) para obtener un valor único. La respuesta de Gunjan Juyal es la correcta. Debe marcarse como la solución –

+9

@PhilippMunin. Las dos respuestas hacen cosas diferentes. Este toma el resultado de una expresión como 'SELECT CAST ('Esta es una prueba' AS VARBINARY (100))' que es '0x5468697320697320612074657374' en mi colación predeterminada y la convierte de nuevo a la cadena' varchar'. La respuesta de Gunjan devuelve la representación hexadecimal como una cadena ('5468697320697320612074657374') Presumiblemente, esta interpretación es correcta para la necesidad del OP, ya que la aceptaron. –

+5

¡ESTA RESPUESTA ES CORRECTA! Lo probé y hace lo que yo y el OP desea. –

12

probar este

SELECT CONVERT(varchar(5000), yourvarbincolumn, 0) 
+6

Tuve que usar un 2 como mi tercer parámetro, en lugar de un cero. Encontré esa respuesta [aquí] (http://stackoverflow.com/questions/12139073/sql-server-converting-varbinary-to-string). – WEFX

+0

en mi caso tengo que usar MAX en lugar de 5000 – sulaiman

86

La siguiente expresión trabajó para mí:

SELECT CONVERT(VARCHAR(1000), varbinary_value, 2); 

Here son más detalles sobre la elección de estilo (el tercer parámetro).

+1

sería bueno si el OP lo marca como respuesta. – celerno

+0

Según lo descrito por @ lara-mayugba a continuación, el estilo 1 incluye el prefijo 0x en el resultado que puede ser útil. – Stan

+0

@celerno ¿por qué lo harían? Esto no hace lo que necesitaban. –

23

En realidad, la mejor respuesta es

SELECT CONVERT(VARCHAR(1000), varbinary_value, 1); 

usando "2" corta la "0x" en el inicio de la varbinary.

+0

este trabajo para mí – Jozcar

Cuestiones relacionadas