Хотя я согласен с комментарием Панагиотиса и с принятым ответом в вопросе, с которым вы связались (то есть, сохраняйте IP как двоичный (4), а не как текст), вы не можете быть в состоянии принять решение эти вещи (я вижу много вопросов о том, как работать с базами данных, которые нельзя изменить, даже если альтернативный дизайн решит все проблемы) -
Таким образом, чтобы преобразовать адрес IPv4 в строковое представление двоичного значения, вы можете использовать последовательность битовых операций для создания этой строки для каждой из 4 частей IP-адреса:
CREATE FUNCTION TinyIntToBinaryString(@value tinyint)
RETURNS CHAR(8)
AS
BEGIN
RETURN CAST(SIGN(@value & 128) as char(1)) +
CAST(SIGN(@value & 64) as char(1)) +
CAST(SIGN(@value & 32) as char(1)) +
CAST(SIGN(@value & 16) as char(1)) +
CAST(SIGN(@value & 8) as char(1)) +
CAST(SIGN(@value & 4) as char(1)) +
CAST(SIGN(@value & 2) as char(1)) +
CAST(SIGN(@value & 1) as char(1))
END
Это вернет строковое представление двоичного значения любого числа от 0 до 255 - поэтому 3
вернет 00000011
, а 174
вернет 10101110
.
Теперь, когда у вас есть это, вы можете использовать его для преобразования всего IP-адреса в двоичное строковое представление:
DECLARE @IP varchar(15) = '24.55.186.203'
SELECT dbo.TinyIntToBinaryString(PARSENAME(@IP, 4)) +
dbo.TinyIntToBinaryString(PARSENAME(@IP, 3)) +
dbo.TinyIntToBinaryString(PARSENAME(@IP, 2)) +
dbo.TinyIntToBinaryString(PARSENAME(@IP, 1))
Результатом будет 00011000001101111011101011001011
Конечно, вы можете создать функцию, которая будет преобразовывать полное представление строки IP для вас - я оставлю это на ваше усмотрение, чтобы написать.