当前位置:  开发笔记 > 数据库 > 正文

如何在TSQL中将二进制值打印为十六进制?

如何解决《如何在TSQL中将二进制值打印为十六进制?》经验,为你挑选了4个好方法。

我正在使用SQL Server 2000从表中打印出一些值PRINT.对于大多数非字符串数据,我可以转换为nvarchar以便能够打印它,但二进制值尝试使用字符的位表示进行转换.例如:

DECLARE @binvalue binary(4)
SET @binvalue = 0x12345678
PRINT CAST(@binvalue AS nvarchar)

预期:

0×12345678

相反,它打印出两个乱码.

如何打印二进制数据的值?是否有内置或我需要自己滚动?

更新:这不是该行的唯一值,所以我不能只打印@binvalue.这更像PRINT N'其他东西'+ ???? + N'more stuff'.不确定这是否有所不同:我本身并没有尝试PRINT @binvalue.



1> Ihor B...:

不要使用master.sys.fn_varbintohexstr- 它非常慢,没有文档,不受支持,并且可能在SQL Server的未来版本中消失.

如果需要转换binary(16)为十六进制字符,请使用convert:

convert(char(34), @binvalue, 1)

为什么34?因为16*2 + 2 = 34,这是"0x" - 2个符号,每个字符加2个符号.

我们尝试在一个有200000行的表上进行2次查询:

    select master.sys.fn_varbintohexstr(field)
    from table`
    

    select convert(char(34), field, 1)
    from table`
    

第一个运行2分钟,第二个运行4秒.


这个有效,但我需要超过34个字符.

2> Eric Z Beard..:

如果您使用的是Sql Server 2005,则可以使用:

print master.sys.fn_varbintohexstr(@binvalue)

我不认为2000年存在,所以你可能不得不自己动手.



3> Charlie Affu..:
select convert(varchar(max), field , 1) 
from table

通过using varchar(max)你将不必担心指定大小(种).



4> Ian Boyd..:

添加一个答案,该答案显示了另一个将二进制数据转换为十六进制字符串然后再次返回的示例。

我想将最高timestamp值转换为varchar

SELECT 
   CONVERT(
      varchar(50), 
      CAST(MAX(timestamp) AS varbinary(8)), 
      1) AS LastTS
FROM Users

哪个返回:

LastTS
==================
0x000000000086862C

注意:使用CONVERTconvert 很重要varbinary -> varchar。使用CAST将不起作用:

SELECT 
   CAST(
      CAST(MAX(timestamp) AS varbinary(8)) 
      AS varchar(50) ) AS LastTS
FROM Users

将二进制数据视为字符而不是十六进制值,并返回一个空字符串。

扭转它

要将存储的十六进制字符串转换回时间戳:

SELECT CAST(CONVERT(varbinary(50), '0x000000000086862C', 1) AS timestamp)

注意:任何代码都会发布到公共领域。无需注明出处。

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有