Как преобразовать 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