SQL Server将varbinary转换为string

我想在T-SQL中从varbinarytypes转换为stringtypes

这里是一个例子:

首先,我得到了这个varbinary

 0x21232F297A57A5A743894A0E4A801FC3 

然后我想把它转换成

 21232f297a57a5a743894a0e4a801fc3 

如何做到这一点?

尝试:

 DECLARE @varbinaryField varbinary(max); SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3; SELECT CONVERT(varchar(max),@varbinaryField,2), @varbinaryField 

更新:对于SQL Server 2008

我知道这是一个古老的问题,但是这里有一个替代方法,我发现在某些情况下更有用。 我相信master.dbo.fn_varbintohexstr函数至less从SQL2K起在SQL Server中可用。 在这里添加它只是为了完整性。 有些读者也可能会发现,看看这个函数的源代码是有益的。

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

如果你想把一个VARBINARY值转换成VARCHARSTRING ),你可以通过声明一个variables来实现:

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

如果你想从列表中select,那么你可以这样做:

 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

您可以在您的WHERE或JOIN条件中使用它,以防万一要将varbinarylogging与string进行比较/匹配

这里是我写的一个简单的例子,使用2个转换方法进行转换和转换,我也用一个固定的string进行了检查

declare @ VB1 VARBINARY(500),@ VB2 VARBINARY(500),@ VB3 VARBINARY(500)

declare @ 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'他们匹配(2)'

IF @ VB1 = @ VB3 PRINT'他们匹配(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'他们匹配(1)'

PRINT str(Len(@ VB1))

PRINT str(Len(@ S1))

PRINT str(Len(@ VB2))

和输出

0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(1排受影响)

他们匹配(2)

他们匹配(3)

  20 40 20 

|| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(1排受影响)

他们匹配(1)

  20 42 20