web-dev-qa-db-fra.com

SQL Server convertissant varbinary en chaîne

Je souhaite effectuer la conversion dans T-SQL d'un type varbinary en type chaîne

Voici un exemple :

D'abord j'ai eu cette varbinary

0x21232F297A57A5A743894A0E4A801FC3

Et puis je veux le convertir en 

21232f297a57a5a743894a0e4a801fc3

Comment faire ça?

48
strike_noir

Essayer:

DECLARE @varbinaryField varbinary(max);
SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3;

SELECT CONVERT(varchar(max),@varbinaryField,2), 
@varbinaryField

MISE À JOUR: Pour SQL Server 2008

73
András Ottó

Je sais que c’est une vieille question, mais voici une approche alternative que j’ai trouvée plus utile dans certaines situations. Je crois que la fonction master.dbo.fn_varbintohexstr est disponible dans SQL Server au moins depuis SQL2K. L'ajouter ici juste pour être complet. Certains lecteurs trouveront peut-être aussi instructif de regarder le code source de cette fonction.

declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select varbin_source = @source
,string_result = master.dbo.fn_varbintohexstr (@source)
11
Craig.Feied

Si vous voulez convertir une valeur VARBINARY unique en VARCHAR (STRING), vous pouvez le faire en déclarant une variable comme celle-ci:

DECLARE @var VARBINARY(MAX)
SET @var = 0x21232F297A57A5A743894A0E4A801FC3
SELECT CAST(@var AS VARCHAR(MAX))

Si vous essayez de sélectionner une colonne de table, procédez comme suit:

SELECT CAST(myBinaryCol AS VARCHAR(MAX))
FROM myTable
6
hims056

Cela fonctionne dans SQL 2005 et 2008:

declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select cast('' as xml).value('xs:hexBinary(sql:variable("@source"))', 'varchar(max)');
3
Kuba Wyrostek

J'ai cherché partout une réponse et finalement cela a fonctionné pour moi:

SELECT Lower(Substring(MASTER.dbo.Fn_varbintohexstr(0x21232F297A57A5A743894A0E4A801FC3), 3, 8000))

Sorties vers (chaîne):

21232f297a57a5a743894a0e4a801fc3

Vous pouvez également l'utiliser dans vos conditions WHERE ou JOIN si vous souhaitez comparer/faire correspondre des enregistrements varbinary avec des chaînes.

1
Walter R

Voici un exemple simple que j'ai écrit pour convertir et reconvertir en utilisant les 2 méthodes de conversion, je l'ai également vérifié avec une chaîne fixe

declarer @ VB1 VARBINAIRE (500), @ VB2 VARBINAIRE (500), @ VB3 VARBINAIRE (500)

declare @ S1 VARCHAR (500)

SET @ VB1 = HASHBYTES ('SHA1', 'Test')

SET @ S1 = CONVERT (varchar (500), @ VB1,2)

SET @ VB2 = CONVERT (varbinary (500), @ S1,2)

SET @ VB3 = CONVERT (varbinary (500), '640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA', 2)

SELECT @ VB1, @ S1, @ VB2, @ VB3

IF @ VB1 = @ VB2 PRINT 'Ils correspondent (2)'

IF @ VB1 = @ VB3 PRINT 'Ils correspondent (3)'

PRINT str (Len (@ VB1))

PRINT str (Len (@ S1))

PRINT str (Len (@ VB2))

SET @ VB1 = HASHBYTES ('SHA1', 'Test')

SET @ S1 = CONVERT (varchar (500), @ VB1,1)

SET @ VB2 = CONVERT (varbinary (500), @ S1,1)

SELECT @ VB1, @ S1, @ VB2

IF @ VB1 = @ VB2 PRINT 'Ils correspondent (1)'

PRINT str (Len (@ VB1))

PRINT str (Len (@ S1))

PRINT str (Len (@ VB2))

et la sortie

. ||| .__ 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(1 rangée (s) touchée (s))

Ils correspondent (2)

Ils correspondent (3)

    20
    40
    20

|| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F79A1

(1 rangée (s) touchée (s))

Ils correspondent (1)

    20
    42
    20
0
Brian