Как преобразовать IP-адрес, хранящийся в таблице, в шестнадцатеричный? ожидаемый результат: 00:00:8D:69:DF:B6 для IP 141.105.223.182

Я использовал это для преобразования IP-адреса, (я читал это из Интернета, а не мой SQL). Теперь я хочу понять, как я могу преобразовать IP-адрес, хранящийся в столбце, в шестнадцатеричный.

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 ответ

Ваш почти там уже!

Если я правильно понимаю ваши требования, вы хотите заменить @IP данными столбца таблицы

Вам просто нужно добавить из и изменить критерии выбора

Я создаю временную таблицу #testdata для демонстрации, вам просто нужно выбрать FROM вашей таблицы

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
Другие вопросы по тегам