2010-07-20 15 views
62

Come convertire un valore di colonna da varbinary(max) a varchar in formato leggibile dall'uomo?varbinary su stringa su SQL Server

+3

voglio varchar poiché il valore è stato stabilito dal valore di stringa .. Voglio leggere quello che è stato scritto .. – theklc

risposta

65

"Conversione di un varbinary ad un varchar" può significare cose diverse.

Se il varbinary è la rappresentazione binaria di una stringa in SQL Server (ad esempio restituito da colata a varbinary direttamente o dai DecryptByPassPhrase o DECOMPRESS funzioni) si può semplicemente CAST si

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

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

Questo è l'equivalente di utilizzare CONVERT con un parametro di stile 0.

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

Altri parametri di stile sono disponibili con CONVERT per le diverse esigenze, come già sottolineato in altre risposte.

+20

QUESTA RISPOSTA NON È CORRETTA. L'ho testato su una tabella con SID utente: l'ammontare dei valori di Distinct cast è inferiore alla quantità di SID binari distinti. Dovresti usare CONVERT (VARCHAR (...), binaryValue, 2) per ottenere un valore univoco - la risposta di Gunjan Juyal è quella giusta - dovrebbe essere contrassegnata come soluzione –

+9

@PhilippMunin - Le due risposte fanno cose diverse. Questo prende il risultato di un'espressione come 'SELECT CAST ('Questo è un test' AS VARBINARY (100))' che è '0x5468697320697320612074657374' nelle mie regole di confronto predefinite e lo converte nuovamente nella stringa' varchar'. La risposta di Gunjan restituisce la rappresentazione esadecimale come una stringa ('5468697320697320612074657374') Presumibilmente questa interpretazione è corretta per le necessità dell'OP in quanto l'hanno accettata. –

+5

QUESTA RISPOSTA È CORRETTA! L'ho provato e fa quello che io e l'OP desideriamo. –

12

Prova questa

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

Ho dovuto usare un 2 come mio terzo parametro, invece di uno zero. Ho trovato questa risposta [qui] (http://stackoverflow.com/questions/12139073/sql-server-converting-varbinary-to-string). – WEFX

+0

nel mio caso devo usare MAX invece di 5000 – sulaiman

86

La seguente espressione ha lavorato per me:

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

Here sono ulteriori dettagli sulla scelta di stile (il terzo parametro).

+1

sarebbe bello se l'OP segna questo come risposta. – celerno

+0

Come descritto da @ lara-mayugba di seguito, lo stile 1 include il prefisso 0x sul risultato che può essere utile .. – Stan

+0

@celerno perché dovrebbero? Questo non fa quello di cui avevano bisogno. –

23

In realtà la risposta migliore è

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

utilizzando "2" taglia fuori il "0x" all'inizio della varbinary.

+0

questo lavoro per me – Jozcar

Problemi correlati