代码之家  ›  专栏  ›  技术社区  ›  Tadmas

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

  •  31
  • Tadmas  · 技术社区  · 17 年前

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

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

    预期:

    0x12345

    相反,它打印了两个乱七八糟的字符。

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

    更新:这不是行中唯一的值,所以我不能只打印@binvalue。它更像是“打印”而不是“其他东西”+????“更多的东西”。不确定这是否会有影响:我没有尝试只打印@binvalue本身。

    6 回复  |  直到 7 年前
        1
  •  29
  •   Eric Z Beard    14 年前

    print master.sys.fn_varbintohexstr(@binvalue)
    

        2
  •  38
  •   user2864740 Heinzi    7 年前

    master.sys.fn_varbintohexstr

    binary(16) convert

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

    16*2 + 2 = 34

    1. select master.sys.fn_varbintohexstr(field)
      from table`
      
    2. select convert(char(34), field, 1)
      from table`
      

        3
  •  21
  •   shA.t Rami Jamleh    9 年前
    select convert(varchar(max), field , 1) 
    from table
    

    using varchar(max)

        4
  •  4
  •   Ian Boyd    10 年前

    timestamp varchar

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

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

    CONVERT 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)
    

        5
  •  3
  •   Ricardo C    17 年前
    DECLARE @binvalue binary(4)
    SET @binvalue = 0x61000000
    PRINT @binvalue 
    PRINT cast('a' AS binary(4))
    PRINT cast(0x61 AS varchar)
    

    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
    

    sp_helptext 'fn_varbintohexsubstring'
    
        6
  •  2
  •   David Claughton    12 年前

    DECLARE @binvalue binary(4)
    SET @binvalue = 0x12345678
    PRINT 'cast(@binvalue AS nvarchar): ' + CAST(@binvalue AS nvarchar)
    PRINT 'convert(varchar(max), @binvalue, 0): ' + CONVERT(varchar(max), @binvalue, 0)
    PRINT 'convert(varchar(max), @binvalue, 1): ' + CONVERT(varchar(max), @binvalue, 1)
    PRINT 'convert(varchar(max), @binvalue, 2): ' + CONVERT(varchar(max), @binvalue, 2)
    print 'master.sys.fn_varbintohexstr(@binvalue): ' + master.sys.fn_varbintohexstr(@binvalue)
    

    cast(@binvalue AS nvarchar): 㐒硖
    convert(varchar(max), @binvalue, 0): 4Vx
    convert(varchar(max), @binvalue, 1): 4Vx
    convert(varchar(max), @binvalue, 2): 4Vx
    master.sys.fn_varbintohexstr(@binvalue): 0x12345678
    


    cast(@binvalue AS nvarchar): 㐒硖
    convert(varchar(max), @binvalue, 0): 4Vx
    convert(varchar(max), @binvalue, 1): 0x12345678
    convert(varchar(max), @binvalue, 2): 12345678
    master.sys.fn_varbintohexstr(@binvalue): 0x12345678