Определение CIDR IP-адреса без длины префикса

Функция

Определение CIDR IP-адреса без длины префикса.

Спецификация
 
< синтаксис >::=
Синтаксические правила
  1. < Байтовое выражение > должно иметь тип BYTE(5).

Возвращаемое значение
  1. Сетевой IP-адрес без префикса. Все биты CIDR IP-адреса после префикса обнуляются.

  2. Формирование сетевого адреса выполняется по следующему алгоритму:

    • шестнадцатеричное представление сетевого адреса преобразуется в двоичное представление, например, 5052200B15 преобразовать в двоичное (в данной функции – без префикса 15): 01010000 01010010 10000000 00001011

    • префикс имеет значение 15 (шестнадцатеричное), что равно значению 21 (десятичное), т.е. длина префикса в сетевом адресе начинается с 21 позиции в двоичном сетевом адресе: 010100000101001010000000 00001011

    • т.к. требуется получить сетевой адрес без префикса, то обнулятся все биты сетевого адреса, начиная с 21 бита: 0101 0000 1010 01010000000 00000000

    • полученное значение представляет искомый сетевой адрес в шестнадцатеричном виде: 50521000000000000000

  3. Тип возвращаемого значения – VARCHAR(15).

Примеры
select cidrpfx (cast HEX('5052200B15') as byte(5));
| 80.82.32.0|
create or replace table tab2 (cidr byte(5));
insert into tab2 values(hex('8082320010'));
select cidrpfx( cidr ) from tab2;
| 128.130.0.0 |