如何在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年不存在,因此我们可能必须自己动手。