varbinary to string to SQL Server


93

列の値を変換する方法varbinary(max)varchar人間が読める形式で?


3
値は文字列値からistertedたので、私はvarchar型をしたい..私は書かれたものを読むことを意味...
BilginKılıç

@MartinSmith pplは私に変化を促します。だからあなたの答えをもう一度マークした。親切なコメントをありがとうございます。
BilginKılıç19年

人々は検索エンジンからこれに出くわしているようで、投票に基づいてスタイル2パラメータがより一般的に必要とされるようですが、これは元の要件がそうでなかった
Martin Smith

回答:


87

「a varbinaryをaに変換するvarchar」とは、異なる意味を持つ場合があります。

varbinary型は、(例えばにキャストして返されたSQL Serverでの文字列のバイナリ表現である場合はvarbinary、直接またはからDecryptByPassPhraseまたはDECOMPRESS機能)あなただけのことができCAST、それ

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

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

これは、CONVERTスタイルパラメータをで使用するのと同じです0

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

CONVERTの回答に記載されているように、さまざまな要件に合わせて他のスタイルパラメータを使用できます。


38
この回答は正しくありません。ユーザーSIDを使用してテーブルでテストしました-異なるキャスト値の量は、DistinctバイナリSIDの量よりも少なくなっています。一意の値を取得するにはCONVERT(VARCHAR(...)、binaryValue、2)を使用する必要があります-Gunjan Juyalからの回答が適切です-ソリューションとしてマークする必要があります
Philipp Munin

13
@PhilippMunin-2つの答えは異なることを行います。これは、デフォルトの照合にSELECT CAST('This is a test' AS VARBINARY(100))あるような式の結果を受け取り、0x5468697320697320612074657374それをvarchar文字列に変換します。Gunjanの答えは、16進数表現を文字列として返します( '5468697320697320612074657374')おそらく、この解釈は、OPがそれを受け入れたので、OPのニーズに対して正しいと考えられます。
マーティン・スミス

8
これは正解です。私はそれをテストしました、そしてそれは私とOPが望んだことをします。
ロニーオーバーバイ、2015年

1
@BIDeveloper上記のコメント(特に私のコメント)を読んだことがあれば、「varbinaryからvarcharへの変換」はさまざまな方法で解釈できることを理解する必要があります。確かにこれがCONVERT、スタイルパラメータが必要な方法を選択する理由です(私の解釈はデフォルトスタイルです)。この答えは、現時点ではユースケースに必要なものではないかもしれませんが、他のユースケースでは正しいです。16進数ではなく「人間が読める形式」を指定した元の質問者を含みます。
マーティン・スミス

1
SQL 2005では、sys.fn_sqlvarbasetostr(@binary)を使用できます。CONVERTが空白になるためです
TheNerdyNerd

149

次の式は私にとってうまくいきました:

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

ここでは、スタイルの選択(3番目のパラメーター)について詳しく説明します。


下記のララ・mayugba @で説明したように、スタイル1 ..役立つことができ、結果に0xをプレフィックスが含まれて
スタン

@celernoなぜ彼らは?これは彼らが必要としたことをしません。
マーティンスミス

1
2008年より前はsys.fn_sqlvarbasetostr(@binaryfield)を使用してください
TheNerdyNerd

@metabuddy-それはどのように間違った情報ですか?「varbinaryからvarcharへの変換」という用語はさまざまな方法で実行でき、これらはスタイルパラメータによって制御されると述べています。その回答のスタイルパラメータがあなたのケースに必要なものではない(ただし、元の質問に回答するものである)ために誤った情報にならないからです
Martin Smith

@TheNerdyNerdのコメント/答えを強調するために、式は `select sys.fn_sqlvarbasetostr(@b)/ *は0x5468697320697320612074657374を返します* / 2008年以前はvarchar(max)をvarchar(8000)に変更すると仮定すると、 。
ザカリースコット

62

実際、最良の答えは

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

の開始時に「2」を使用すると、「」がカットされます。0xvarbinary


@BojieShuai「これ以上同意することは不可能であるほど同意する」または「以前は同意したが、もはや同意しない」という意味ですか?
howcheng

@howcheng私は「これ以上同意できない」という意味です。これを指摘してくれてありがとう。
Bojie Shuai、

15

これを試して

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

6
3番目のパラメーターとして、ゼロではなく2を使用する必要がありました。ここでその答えを見つけまし
WEFX 2013年

1
私の場合、5000ではなくMAXを使用する必要があります
sulaiman sudirman

0

以下のためにVARBINARY(MAX)列に、私が使用していましたNVARCHAR(MAX)

cast(Content as nvarchar(max))

または

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

0

私はこれを試しました、それは私のために働きました:

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

0

元の投稿も苦労していたので、以下をご覧ください[ここ] [1]

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


  [1]: https://stackoverflow.com/questions/60525910/powershell-truncating-sql-query-output?noredirect=1#comment107077512_60525910
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.