SQL Server将varbinary转换为字符串

我想在T-SQL中从varbinary类型转换为字符串类型

这是一个例子:

首先我得到了varbinary

0x21232F297A57A5A743894A0E4A801FC3

然后我想将其转换为

21232f297a57a5a743894a0e4a801fc3

这该怎么做?

strike_noir asked 2020-02-12T10:03:02Z
6个解决方案
76 votes

尝试:

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

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

更新:对于SQL Server 2008

András Ottó answered 2020-02-12T10:03:25Z
11 votes

我知道这是一个老问题,但是这是我发现在某些情况下更有用的替代方法。 我相信至少从SQL2K开始,master.dbo.fn_varbintohexstr函数已在SQL Server中可用。 在此处添加它只是为了完整性。 一些读者可能还会发现查看此函数的源代码具有启发性。

declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select varbin_source = @source
,string_result = master.dbo.fn_varbintohexstr (@source)
Craig.Feied answered 2020-02-12T10:03:45Z
6 votes

如果要将单个VARBINARY值转换为VARCHARSTRING),可以通过声明如下变量来完成:

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

如果您尝试从表列中进行选择,则可以执行以下操作:

SELECT CAST(myBinaryCol AS VARCHAR(MAX))
FROM myTable
hims056 answered 2020-02-12T10:04:11Z
3 votes

这适用于SQL 2005和2008:

declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select cast('' as xml).value('xs:hexBinary(sql:variable("@source"))', 'varchar(max)');
Kuba Wyrostek answered 2020-02-12T10:04:32Z
2 votes

我到处寻找答案,最后对我有用:

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

输出到(字符串):

21232f297a57a5a743894a0e4a801fc3

您也可以在WHERE或JOIN条件中使用它,以防将varbinary记录与字符串进行比较/匹配

Walter R answered 2020-02-12T10:05:05Z
0 votes

这是我编写的一个简单示例,该示例使用2个convert方法进行转换和转换,我还使用固定字符串对其进行了检查

声明@ VB1 VARBINARY(500),@ VB2 VARBINARY(500),@ VB3 VARBINARY(500)

声明@ S1 VARCHAR(500)

SET @ VB1 = HASHBYTES('SHA1','Test')

设置@ S1 = CONVERT(varchar(500),@ VB1,2)

设置@ VB2 = CONVERT(varbinary(500),@ S1,2)

SET @ VB3 = CONVERT(varbinary(500),'640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA',2)

选择@ VB1,@ S1,@ VB2,@ VB3

IF @ VB1 = @ VB2打印'它们匹配(2)'

IF @ VB1 = @ VB3打印'它们匹配(3)'

打印str(Len(@ VB1))

打印str(Len(@ S1))

打印str(Len(@ VB2))

SET @ VB1 = HASHBYTES('SHA1','Test')

设置@ S1 = CONVERT(varchar(500),@ VB1,1)

SET @ VB2 = CONVERT(varbinary(500),@ S1,1)

选择@ VB1,@ S1,@ VB2

IF @ VB1 = @ VB2打印'它们匹配(1)'

打印str(Len(@ VB1))

打印str(Len(@ S1))

打印str(Len(@ VB2))

和输出

|||0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A7F5

(影响1行)

他们匹配(2)

他们比赛(3)

    20
    40
    20

||0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(影响1行)

他们匹配(1)

    20
    42
    20
Brian answered 2020-02-12T10:07:26Z
translate from https://stackoverflow.com:/questions/12139073/sql-server-converting-varbinary-to-string