T-SQLでvarbinary
型から文字列型に変換したい
以下に例を示します。
最初にこれを入手しましたvarbinary
0x21232F297A57A5A743894A0E4A801FC3
そして、私はそれをに変換したい
21232f297a57a5a743894a0e4a801fc3
これを行う方法?
試してください:
DECLARE @varbinaryField varbinary(max);
SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3;
SELECT CONVERT(varchar(max),@varbinaryField,2),
@varbinaryField
更新:SQL Server 2008の場合
私はこれが古い質問であることを知っていますが、状況によってはもっと便利な代替アプローチを示します。 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)
単一のVARBINARY
値をVARCHAR
(STRING
)に変換する場合は、次のような変数を宣言することで実行できます。
DECLARE @var VARBINARY(MAX)
SET @var = 0x21232F297A57A5A743894A0E4A801FC3
SELECT CAST(@var AS VARCHAR(MAX))
テーブル列から選択しようとしている場合、次のようにすることができます:
SELECT CAST(myBinaryCol AS VARCHAR(MAX))
FROM myTable
これは、SQL 2005と2008の両方で機能します。
declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select cast('' as xml).value('xs:hexBinary(sql:variable("@source"))', 'varchar(max)');
私はどこでも答えを探して、最終的にこれが私のために働いた:
SELECT Lower(Substring(MASTER.dbo.Fn_varbintohexstr(0x21232F297A57A5A743894A0E4A801FC3), 3, 8000))
(string)への出力:
21232f297a57a5a743894a0e4a801fc3
Varbinaryレコードを文字列と比較/照合する場合にも、WHEREまたはJOIN条件で使用できます。
これは、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