54

我想在 T-SQL 中进行从varbinary类型到字符串类型的转换

这是一个例子:

首先我得到了这个varbinary

0x21232F297A57A5A743894A0E4A801FC3

然后我想将其转换为

21232f297a57a5a743894a0e4a801fc3

这该怎么做?

4

6 回答 6

86

尝试:

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

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

更新:对于 SQL Server 2008

于 2012-08-27T09:12:22.373 回答
13

我知道这是一个老问题,但这是我发现在某些情况下更有用的替代方法。我相信 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)
于 2013-12-19T09:21:56.623 回答
7

如果要将单个VARBINARY值转换为VARCHAR( STRING),可以通过声明如下变量来实现:

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

如果您尝试从表格列中进行选择,那么您可以这样做:

SELECT CAST(myBinaryCol AS VARCHAR(MAX))
FROM myTable
于 2012-08-27T09:12:06.820 回答
3

这适用于 SQL 2005 和 2008:

declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select cast('' as xml).value('xs:hexBinary(sql:variable("@source"))', 'varchar(max)');
于 2012-08-27T09:13:24.603 回答
2

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

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

输出到(字符串):

21232f297a57a5a743894a0e4a801fc3

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

于 2016-06-02T00:42:49.377 回答
0

这是我编写的一个简单示例,用于使用 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)

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

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

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

打印 str(Len(@VB1))

打印 str(Len(@S1))

打印 str(Len(@VB2))

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

SET @S1=CONVERT(varchar(500),@VB1,1)

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

选择@VB1,@S1,@VB2

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

打印 str(Len(@VB1))

打印 str(Len(@S1))

打印 str(Len(@VB2))

和输出

||| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C16FBDF7FAB746

(1 行受影响)

他们匹配(2)

他们匹配(3)

    20
    40
    20

|| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(1 行受影响)

他们匹配(1)

    20
    42
    20
于 2017-02-27T13:44:46.473 回答