Определение CIDR IP-адреса без длины префикса.
::=
<Байтовое выражение>
должно иметь тип BYTE(5).
Сетевой IP-адрес без префикса. Все биты CIDR IP-адреса после префикса обнуляются.
Формирование сетевого адреса выполняется по следующему алгоритму:
шестнадцатеричное представление сетевого адреса преобразуется в двоичное представление, например, 5052200B15 преобразовать в двоичное (в данной функции – без префикса 15): 01010000 01010010 10000000 00001011
префикс имеет значение 15 (шестнадцатеричное), что равно значению 21
(десятичное), т.е. длина префикса в сетевом адресе начинается с 21 позиции в
двоичном сетевом адресе:
010100000101001010000000 00001011
т.к. требуется получить сетевой адрес без префикса, то обнулятся все биты
сетевого адреса, начиная с 21 бита:
0101 0000 1010 01010000000 00000000
полученное значение представляет искомый сетевой адрес в шестнадцатеричном виде: 50521000000000000000
Тип возвращаемого значения – 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 |