将十六进制转换为IP内联查询

时间:2019-06-11 12:09:10

标签: sql-server

问题是我想编写一个内联查询以将十六进制代码转换为ip格式,但是我得到了错误的结果

我正在尝试编写一个将十六进制转换为ip的查询,但是我得到的结果是错误的

SELECT DNS_SERVER1,
        CONVERT(VARCHAR,
         c.DNS_SERVER1/16777216)+'.'+CONVERT(VARCHAR, c.DNS_SERVER1/65535 % 256)+'.'+CONVERT(VARCHAR, c.DNS_SERVER1/256 % 256)+'.'+CONVERT(VARCHAR, c.DNS_SERVER1 % 256) as DNS_SERVER1_CONVERTED
FROM SEPMAdmin.SEM_COMPUTER AS c

使用上面的查询和示例数据“ 86921E34”,我应该得到“ 134.146.30.52”,但得到的却是“ -121.-110.-225.-204”

1 个答案:

答案 0 :(得分:0)

像这样尝试...

DECLARE @hex_val binary(4) = 0x86921E34;

SELECT 
    ip_address = CONCAT(
            CONVERT(int, SUBSTRING(@hex_val, 1,1)), '.',
            CONVERT(int, SUBSTRING(@hex_val, 2,1)), '.',
            CONVERT(int, SUBSTRING(@hex_val, 3,1)), '.',
            CONVERT(int, SUBSTRING(@hex_val, 4,1))
            );

结果...

ip_address
---------------------------------------------------
134.146.30.52