web-dev-qa-db-ja.com

varbinaryを文字列に変換するSQL Server

T-SQLでvarbinary型から文字列型に変換したい

以下に例を示します。

最初にこれを入手しましたvarbinary

0x21232F297A57A5A743894A0E4A801FC3

そして、私はそれをに変換したい

21232f297a57a5a743894a0e4a801fc3

これを行う方法?

48
strike_noir

試してください:

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

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

更新:SQL Server 2008の場合

75
András Ottó

私はこれが古い質問であることを知っていますが、状況によってはもっと便利な代替アプローチを示します。 master.dbo.fn_varbintohexstr関数は、少なくともSQL2K以降、SQL Serverで使用できると信じています。完全を期すためにここに追加します。一部の読者は、この関数のソースコードを見ると有益な場合もあります。

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

単一のVARBINARY値をVARCHARSTRING)に変換する場合は、次のような変数を宣言することで実行できます。

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

テーブル列から選択しようとしている場合、次のようにすることができます:

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

これは、SQL 2005と2008の両方で機能します。

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

私はどこでも答えを探して、最終的にこれが私のために働いた:

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

(string)への出力:

21232f297a57a5a743894a0e4a801fc3

Varbinaryレコードを文字列と比較/照合する場合にも、WHEREまたはJOIN条件で使用できます。

2
Walter R

これは、2つの変換メソッドを使用して変換および逆変換するために書いた簡単な例です。また、固定文字列でチェックしました

@ VB1 VARBINARY(500)、@ VB2 VARBINARY(500)、@ VB3 VARBINARY(500)を宣言します

@ 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 'They Match(2)'

IF @ VB1 = @ VB3 PRINT 'They Match(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 'They Match(1)'

PRINT str(Len(@ VB1))

PRINT str(Len(@ S1))

PRINT str(Len(@ VB2))

そして出力

||| 1

(1行影響を受けます)

彼らは一致する(2)

彼らは一致する(3)

    20
    40
    20

|| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(1行影響を受けます)

彼らは一致する(1)

    20
    42
    20
0
Brian