3

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

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

当它被 CAST 或 CONVERTED 转换为 VARCHAR 时,我得到:

+˽Ð:¾Îréî¿•

我正在寻找 SQL Server 返回一个 varchar,其中 varbinary 的十六进制表示形式为 varchar,例如:

4b78374c6a3733514f723444444d35793665362f6c513d3d

在 CAST/CONVERT/function 中是否有执行此操作的构建,或者是否必须将其添加为用户定义的函数?UDF 是什么?

如果我可以在转换过程中选择是否要大写 AF 或小写 af,则可以加分。

4

4 回答 4

2

对于 SQL2005,我将使用xsd:hexBinary 数据类型

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(参见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

于 2013-11-14T04:33:27.787 回答
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 演示

于 2013-11-14T03:10:48.063 回答
0

对于 SQL 2008+

SELECT CONVERT(VARCHAR(MAX), @x, 1)
于 2020-08-13T07:21:02.037 回答
-1

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

通过修改 "style" 参数CONVERT()并添加LOWER(),我们可以准确地得到提问者正在寻找的内容,而无需使用SUBSTRING()or RIGHT()

SELECT LOWER(CONVERT(VARCHAR(MAX), @x, 2))
于 2020-12-21T12:02:01.373 回答