varbinary to string on SQL Server


96

Nasıl bir sütun değeri dönüştürmek için varbinary(max)hiç varcharinsan tarafından okunabilir biçimde?


3
değer string değerinden girildiği için varchar istiyorum .. Yazılanı okumak istiyorum ..
Bilgin Kılıç

@MartinSmith ppl beni değişime zorluyor. Cevabınızı tekrar işaretlediniz. nazik yorumlarınız için teşekkür ederim.
Bilgin Kılıç

İnsanlar arama motorlarından bununla karşılaşıyor gibi görünüyor ve oylamaya göre stil 2 parametresi daha çok gerekli görünüyor, ancak bu sizin orijinal gereksiniminizi yapmıyor
Martin Smith

Yanıtlar:


93

"Bir dönüştürme varbinaryiçin varchar" farklı anlamlar taşıyabilir.

Değişken ikili SQL Server bir dize ikili temsilidir varsa (örneğin döküm tarafından döndürülen varbinarydoğrudan ya dan DecryptByPassPhraseveya DECOMPRESSsadece can fonksiyonlar) CASTo

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

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

Bu, CONVERTstil parametresi ile kullanmaya eşdeğerdir 0.

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

Diğer CONVERTyanıtlarda belirtildiği gibi farklı gereksinimler için diğer stil parametreleri mevcuttur .


39
BU CEVAP DOĞRU DEĞİLDİR. Kullanıcı SID'leri ile tabloda test ettim - Farklı dönüştürülen değerlerin miktarı, Farklı ikili SID'lerin miktarından daha az. Benzersiz bir değer elde etmek için CONVERT (VARCHAR (...), binaryValue, 2) kullanmalısınız - Gunjan Juyal'ın cevabı doğru cevaptır - çözüm olarak işaretlenmelidir
Philipp Munin 18'13

13
@PhilippMunin - İki cevap farklı şeyler yapıyor. Bu , benim varsayılan harmanlamamda SELECT CAST('This is a test' AS VARBINARY(100))olduğu gibi bir ifadenin sonucunu alır 0x5468697320697320612074657374ve onu varchardizeye geri dönüştürür . Gunjan'ın cevabı onaltılık gösterimi bir dizge olarak döndürür ('5468697320697320612074657374') Muhtemelen bu yorum, OP'nin kabul ettiği şekliyle ihtiyacı için doğrudur.
Martin Smith

8
BU CEVAP DOĞRU! Test ettim ve ben ve OP'nin istediğini yapıyor.
Ronnie Overby

1
@BIDeveloper Eğer yukarıdaki yorumları (özellikle benimkini) okuduysanız, sorunun "varbinary'yi varchar'a dönüştürmenin" farklı şekillerde yorumlanabileceğinin farkına varmalısınız. Aslında bu, neden CONVERTistediğiniz şekilde seçmek için bir stil parametresine sahip olmanın nedenidir (benim yorumum varsayılan stildir) Dolayısıyla, bu yanıt şu anda kullanım durumunuz için ihtiyacınız olan şey olmayabilir, ancak diğer kullanım durumları için doğrudur. Asıl soru soran kişi dahil "insan tarafından okunabilir formu" belirten hex değil.
Martin Smith

1
SQL 2005, CONVERT benim için boş olacağından sys.fn_sqlvarbasetostr (@binary) kullanabilirsiniz
TheNerdyNerd

153

Aşağıdaki ifade benim için çalıştı:

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

Burada stil seçimi (üçüncü parametre) hakkında daha fazla ayrıntı var.


1
Aşağıda @ lara-mayugba tarafından açıklandığı gibi, stil 1, sonuçta yararlı olabilecek 0x ön ekini içerir.
Stan

@celerno neden olsun ki? Bu onların ihtiyaç duyduğu şeyi yapmıyor.
Martin Smith

1
2008 öncesi sys.fn_sqlvarbasetostr (@binaryfield)
TheNerdyNerd

@metabuddy - ne şekilde yanlış bilgilendiriliyor? "Bir değişkenini bir varchar'a dönüştürme" teriminin farklı şekillerde yapılabileceğini ve bunların stil parametresi tarafından kontrol edildiğini belirtir. Sırf bu yanıttaki stil parametresi sizin durumunuz için ihtiyacınız olan değil (ama asıl soruyu cevaplayan) onu yanlış bilgilendirmiyor
Martin Smith

1
@TheNerdyNerd'ın açıklamasını / cevabını vurgulamak için, ifade "select sys.fn_sqlvarbasetostr (@b) olacaktır / * 0x5468697320697320612074657374 * döndürür / Birinin varchar (max) 'ı varchar (8000) olarak değiştirdiğini varsayarsak 2008 öncesi bunu kullanmaz .
Zachary Scott

68

Aslında en iyi cevap

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

başındaki " 2" keser " 0x" varbinary.


@BojieShuai "O kadar katılıyorum ki daha fazla anlaşmam imkansız" mı, yoksa "Eskiden katılıyordum ama artık yapmıyorum" mu?
howcheng

@howcheng "Daha fazla anlaşamıyorum" demek istiyorum. Bunu işaret ettiğiniz için teşekkürler.
Bojie Shuai

"Eskiden katılıyordum ama şimdi aynı fikirde değilim ", " Artık katılmıyorum" olurdu (" artık " değil, iki kelime). Anymore<> any more. Herhangi bir SPACE fazla = "daha büyük ölçüde veya derecede".
Tim

15

Bunu dene

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

6
Üçüncü parametrem olarak sıfır yerine 2 kullanmak zorunda kaldım. Cevabı burada buldum .
WEFX

1
benim durumumda 5000 yerine MAX kullanmalıyım
sulaiman sudirman

0

Bir VARBINARY(MAX)sütun için şunu kullanmalıydım NVARCHAR(MAX):

cast(Content as nvarchar(max))

Veya

CONVERT(NVARCHAR(MAX), Content, 0)
VARCHAR(MAX) didn't show the entire value

0

Bunu denedim, benim için çalıştı:

declare @b2 VARBINARY(MAX) 
set @b2 = 0x54006800690073002000690073002000610020007400650073007400
SELECT CONVERT(nVARCHAR(1000), @b2, 0);

0

Ben mücadele ederken aşağıya bir göz atın

bcp "SELECT CAST(BINARYCOL AS VARCHAR(MAX)) FROM OLTP_TABLE WHERE ID=123123 AND COMPANYID=123" 
queryout "C:\Users\USER\Documents\ps_scripts\res.txt" -c -S myserver.db.com  -U admin -P password

Referans: orijinal gönderi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.