如何在TSQL中将十六进制的二进制值打印出来?

时间:2020-03-05 18:54:59  来源:igfitidea点击:

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

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

预期的:

0x12345678

而是打印两个乱码。

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

更新:这不是行上唯一的值,所以我不能只是PRINT @binvalue。它更像是PRINT N'other stuff'+ ???? +还有更多内容。不知道这是否有所不同:我自己并没有尝试PRINT @binvalue。

解决方案

回答

DECLARE @binvalue binary(4)
SET @binvalue = 0x61000000
PRINT @binvalue 
PRINT cast('a' AS binary(4))
PRINT cast(0x61 AS varchar)

不要投。

转换将特定数据库的相应排序规则设置上的二进制值转换为文本。

[开始编辑]
如果我们需要字符串变量中的打印值,请使用Eric Z Beard建议的功能。

DECLARE @mybin1 binary(16)
DECLARE @s varchar(100)
SET @mybin1 = 0x098F6BCD4621D373CADE4E832627B4F6
SET @s = 'The value of @mybin1 is: ' + sys.fn_varbintohexsubstring(0, @mybin1,1,0)
PRINT @s

如果由于服务器版本或者需要特殊权限而无法使用此功能,则可以创建自己的功能。

要查看该功能在SQL Server 2005 Express版中是如何实现的,可以执行以下操作:

sp_helptext 'fn_varbintohexsubstring'

回答

如果我们使用的是Sql Server 2005,则可以使用以下命令:

print master.sys.fn_varbintohexstr(@binvalue)

但我认为这在2000年不存在,因此我们可能必须自己动手。