如何将十六进制varbinary转换为其字符串表示形式?

时间:2013-11-14 03:03:33

标签: sql-server binary hex type-conversion user-defined-functions

我在SQL Server数据库中有一些base-64编码的字符串,例如:

DECLARE @x VARBINARY(64);
SET @x = 0x4b78374c6a3733514f723444444d35793665362f6c513d3d

当它是CAST或CONVERTED到VARCHAR时,我得到:

+˽Ð:¾Îréî¿•

我正在寻找SQL Server将varbin的十六进制表示形式的varchar作为varchar返回,例如:

4b78374c6a3733514f723444444d35793665362f6c513d3d

CAST / CONVERT /函数中是否有构建这样做,还是必须添加为用户定义函数?那UDF会是什么?

如果我可以在转换过程中选择是否需要大写字母A-F或小写字母a-f,那么

点数。

4 个答案:

答案 0 :(得分:2)

DECLARE @x VARBINARY(64);
SET @x = 0x4b78374c6a3733514f723444444d35793665362f6c513d3d;

SELECT CONVERT(VARCHAR(64), @x),
       SUBSTRING(CONVERT(VARCHAR(64), @x, 1), 3, 64);
       ----- style number is important ---^ 

结果:

Kx7Lj73QOr4DDM5y6e6/lQ==    4B78374C6A3733514F723444444D35793665362F6C513D3D

如果您想要小写,只需将整个SUBSTRING操作包装在LOWER()中。

SQLFiddle demo

答案 1 :(得分:1)

对于SQL2005,我会使用xsd:hexBinary data type

DECLARE @x VARBINARY(64);
SET @x = 0x4b78374c6a3733514f723444444d35793665362f6c513d3d

SELECT '0x'+CONVERT(XML, '').value('xs:hexBinary(sql:variable("@x") )', 'VARCHAR(MAX)');
SELECT '0x'+LOWER(CONVERT(XML, '').value('xs:hexBinary(sql:variable("@x") )', 'VARCHAR(MAX)'));

对于SQL2008 +,我会使用CONVERT(参见section Binary styles):

SELECT CONVERT(VARCHAR(MAX), @x, 1)

参考文献: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

答案 2 :(得分:0)

对于SQL 2008 +

SELECT CONVERT(VARCHAR(MAX), @x, 1)

答案 3 :(得分:0)

建议的解决方案 SELECT CONVERT(VARCHAR(MAX), @x, 1) 返回“0x4B78374C...”,但问题显然希望结果为“4b78374c...”。

通过将“style”参数修改为 CONVERT() 并添加 LOWER(),我们得到了提问者正在寻找的内容,无需使用 SUBSTRING()RIGHT()

SELECT LOWER(CONVERT(VARCHAR(MAX), @x, 2))