我希望能够在T-SQL中将varbinary
类型转换为字符串类型
以下是一个示例:
首先,我获得了这个varbinary
0x21232F297A57A5A743894A0E4A801FC3
然后我想将它转换为
21232f297a57a5a743894a0e4a801fc3
如何做到这一点?
我希望能够在T-SQL中将varbinary
类型转换为字符串类型
以下是一个示例:
首先,我获得了这个varbinary
0x21232F297A57A5A743894A0E4A801FC3
然后我想将它转换为
21232f297a57a5a743894a0e4a801fc3
如何做到这一点?
尝试:
DECLARE @varbinaryField varbinary(max);
SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3;
SELECT CONVERT(varchar(max),@varbinaryField,2),
@varbinaryField
更新:
针对 SQL Server 2008
SELECT CONVERT(VARCHAR(MAX), MyBinaryField, 2) FROM MyTable WHERE ID = 123456
- MÇTSELECT CONVERT( VARCHAR(MAX), MyBinaryField, 1) FROM MyTable WHERE ID = 123456;
。 - Graeme隐式转换从数据类型varchar到varbinary(max)不允许。请使用CONVERT函数运行此查询。
- Jalal我知道这是一个老问题,但是这里有一个替代方案,在某些情况下我发现它更有用。我相信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))
输出结果(字符串):
21232f297a57a5a743894a0e4a801fc3
如果您想将varbinary记录与字符串进行比较/匹配,您也可以在WHERE或JOIN条件中使用它。
这里是我写的一个简单示例,使用两种转换方法进行转换和还原,并使用固定字符串进行检查
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 'They Match(1)'
PRINT str(Len(@VB1))
PRINT str(Len(@S1))
PRINT str(Len(@VB2))
输出结果如下:
||| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA
(1 行受影响)
They Match(2)
They Match(3)
20
40
20
|| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA
(1 行受影响)
它们匹配(1)
20
42
20