问题是我想编写一个内联查询以将十六进制代码转换为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”
答案 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