2010-07-20 3 views
62

Comment convertir une valeur de colonne de varbinary(max) en varchar sous une forme lisible par l'homme?varbinary à chaîne sur SQL Server

+3

Je veux varchar puisque la valeur a été déduite de la valeur de chaîne .. Je veux dire lire ce qui a été écrit .. – theklc

Répondre

65

"Conversion d'un varbinary à un varchar" peut signifier des choses différentes.

Si la varbinary est la représentation binaire d'une chaîne dans SQL Server (par exemple retourné par coulée à varbinary directement ou à partir des fonctions DecryptByPassPhrase ou DECOMPRESS) vous pouvez juste CAST il

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

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

Ceci est l'équivalent d'utiliser CONVERT avec un paramètre de style de 0.

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

D'autres paramètres de style sont disponibles avec des exigences différentes pour CONVERT comme indiqué dans d'autres réponses.

+20

CETTE REPONSE N'EST PAS CORRECTE. Je l'ai testé sur la table avec les SID de l'utilisateur - le nombre de valeurs castées distinctes est inférieur au nombre de SID binaires distincts. Vous devriez utiliser CONVERT (VARCHAR (...), binaryValue, 2) pour obtenir une valeur unique - la réponse de Gunjan Juyal est la bonne - elle devrait être marquée comme solution –

+9

@PhilippMunin - Les deux réponses font des choses différentes. Celui-ci prend le résultat d'une expression telle que 'SELECT CAST ('Ceci est un test' AS VARBINARY (100))' qui est '0x5468697320697320612074657374' dans mon classement par défaut et le convertit dans la chaîne' varchar'. La réponse de Gunjan renvoie la représentation hexadécimale sous la forme d'une chaîne ('5468697320697320612074657374') Cette interprétation est vraisemblablement correcte pour le besoin du PO tel qu'ils l'ont accepté. –

+5

CETTE REPONSE EST CORRECT! Je l'ai testé et il fait ce que je et l'OP désiré. –

12

Essayez cette

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

Je devais utiliser un 2 comme troisième paramètre, au lieu d'un zéro. J'ai trouvé cette réponse [ici] (http://stackoverflow.com/questions/12139073/sql-server-converting-varbinary-to-string). – WEFX

+0

dans mon cas je dois utiliser MAX au lieu de 5000 – sulaiman

86

L'expression suivante a fonctionné pour moi:

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

Here sont plus de détails sur le choix du style (le troisième paramètre).

+1

serait bien si l'OP marquer comme réponse. – celerno

+0

Comme décrit par @ lara-mayugba ci-dessous, le style 1 inclut le préfixe 0x sur le résultat qui peut être utile. – Stan

+0

@celerno pourquoi le feraient-ils? Cela ne fait pas ce dont ils avaient besoin. –

23

En fait, la meilleure réponse est

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

en utilisant "2" coupe le "0x" au début de la varbinary.

+0

ce travail pour moi – Jozcar

Questions connexes