如何将表中存储的IP地址转换为十六进制?我期望的输出是IP 141.105.223.182的00:00:8D:69:DF:B6

时间:2018-08-10 10:25:30

标签: sql-server hex ssms-2017

我用它来转换IP地址,(我是从Web上而不是从SQL上读取的)。现在,我想了解如何将存储在列中的IP地址转换为HEXADECIMAL。

DECLARE @IP varchar(30) 
SET @IP = '192.168.1.1'

SELECT 

'00:00:'+
RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME(@IP, 4) AS int)), 2),2) + ':'
+
RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME(@IP, 3) AS int)), 2),2) + ':'
+
RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME(@IP, 2) AS int)), 2),2) + ':'
+
RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME(@IP, 1) AS int)), 2),2) 

1 个答案:

答案 0 :(得分:0)

您已经快到了!

如果我正确理解了您的要求,则想用表的列数据替换@IP

您只需要添加一个from并更改选择条件

我创建了一个临时表#testdata进行演示,您只需要从表中选择

create table #testdata
([IP] varchar(25))

insert into #testdata
values
('192.168.1.1')
insert into #testdata
values
('192.168.1.2')
insert into #testdata
values
('192.168.1.3')

SELECT 
'00:00:'+
RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME([IP], 4) AS int)), 2),2) + ':'
+ RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME([IP], 3) AS int)), 2),2) + ':'
+ RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME([IP], 2) AS int)), 2),2) + ':'
+ RIGHT(CONVERT(varchar(max), CONVERT(VARBINARY(4), CAST(PARSENAME([IP], 1) AS int)), 2),2) 
FROM #testdata