我想在T-SQL中从varbinary
类型转换为字符串类型
以下是一个例子:
首先我得到了这个varbinary
0x21232F297A57A5A743894A0E4A801FC3
然后我想把它转换为
21232f297a57a5a743894a0e4a801fc3
怎么做?
答案 0 :(得分:73)
尝试:
DECLARE @varbinaryField varbinary(max);
SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3;
SELECT CONVERT(varchar(max),@varbinaryField,2),
@varbinaryField
更新: 对于SQL Server 2008
答案 1 :(得分:11)
我知道这是一个老问题,但这里有一种替代方法,我发现在某些情况下更有用。我相信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)
答案 2 :(得分:6)
如果您想将单个VARBINARY
值转换为VARCHAR
(STRING
),可以通过声明如下变量来执行此操作:
DECLARE @var VARBINARY(MAX)
SET @var = 0x21232F297A57A5A743894A0E4A801FC3
SELECT CAST(@var AS VARCHAR(MAX))
如果您尝试从表格列中进行选择,则可以这样做:
SELECT CAST(myBinaryCol AS VARCHAR(MAX))
FROM myTable
答案 3 :(得分:3)
这适用于SQL 2005和2008:
declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select cast('' as xml).value('xs:hexBinary(sql:variable("@source"))', 'varchar(max)');
答案 4 :(得分:1)
我到处寻找答案,最后这对我有用:
SELECT Lower(Substring(MASTER.dbo.Fn_varbintohexstr(0x21232F297A57A5A743894A0E4A801FC3), 3, 8000))
输出到(字符串):
21232f297a57a5a743894a0e4a801fc3
您可以在WHERE或JOIN条件中使用它,以防您想要使用字符串比较/匹配varbinary记录
答案 5 :(得分:0)
这是我编写的一个简单示例,使用2种转换方法进行转换和转换,我还使用固定字符串检查了它
声明@ VB1 VARBINARY(500),@ VB2 VARBINARY(500),@ VB3 VARBINARY(500)
声明@ S1 VARCHAR(500)
SET @ VB1 = HASHBYTES(' SHA1','测试')
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','测试')
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