PostgreSQL-Network Address类型操作和函数

一、操作

inet << inet → boolean
子网是否严格包含在子网中?此运算符和接下来的四个运算符测试子网包含。他们只考虑两个地址的网络部分(忽略网络掩码右侧的任何位)并确定一个网络是否与另一个网络相同或属于另一个网络。

例子:

select inet '192.168.1.5' << inet '192.168.1/24';
select inet '192.168.0.5' << inet '192.168.1/24';
select inet '192.168.1/24' << inet '192.168.1/24';

inet <<= inet → boolean
子网是否包含或等于子网?

select inet '192.168.1/24' <<= inet '192.168.1/24';

inet >> inet → boolean
子网是否严格包含子网?

select inet '192.168.1/24' >> inet '192.168.1.5';

inet >>= inet → boolean
子网是否包含或等于子网?

select inet '192.168.1/24' >>= inet '192.168.1/24';
select inet '192.168.1/24' >> inet '192.168.1/24';

inet && inet → boolean
任一子网是否包含或等于另一个子网?

select inet '192.168.1/24' && inet '192.168.1.80/28';
SELECT inet '192.168.1/24' && inet '192.168.2.0/28';

inet → inet
按位计算 NOT。

select ~ inet '192.168.1.6';

inet & inet → inet
计算按位与。

select inet '192.168.1.6' & inet '0.0.0.255';

inet | inet → inet
计算按位或。

select inet '192.168.1.6' | inet '0.0.0.255';

inet + bigint → inet
向地址添加偏移量。

select inet '192.168.1.6' + 25;

bigint + inet → inet
向地址添加偏移量。

select 200 + inet '::ffff:fff0:1';

inet - bigint → inet
从地址中减去偏移量。

SELECT inet '192.168.1.43' - 36;

inet - inet → bigint
计算两个地址的差。

SELECT inet '192.168.1.43' - inet '192.168.1.19';
select inet '::1' - inet '::ffff:1';

二、函数

broadcast ( inet ) → inet
计算地址网络的广播地址。

select broadcast(inet '192.168.1.5/24') ;

family ( inet ) → integer
返回地址的系列:4 表示 IPv4,6 表示 IPv6。

select family(inet '::1');

host ( inet ) → text
以文本形式返回 IP 地址,忽略网络掩码。

select host(inet '192.168.1.0/24');

hostmask ( inet ) → inet
计算地址网络的主机掩码。

select hostmask(inet '192.168.23.20/30');

inet_merge ( inet, inet ) → cidr
计算包含两个给定网络的最小网络。

select inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24') ;

inet_same_family ( inet, inet ) → boolean
测试地址是否属于同一个 IP 系列。

select inet_same_family(inet '192.168.1.5/24', inet '::1');

masklen ( inet ) → integer
返回网络掩码长度(以位为单位)。

select masklen(inet '192.168.1.5/24');

netmask ( inet ) → inet
计算地址网络的网络掩码。

select netmask(inet '192.168.1.5/24');

network ( inet ) → cidr
返回地址的网络部分,将网络掩码右侧的内容归零。(这相当于将值转换为 cidr。)

select network(inet '192.168.1.5/24');

set_masklen ( inet, integer ) → inet
设置 inet 值的网络掩码长度。地址部分不变。

select set_masklen(inet '192.168.1.5/24', 16);

set_masklen ( cidr, integer ) → cidr
设置 cidr 值的网络掩码长度。新网络掩码右侧的地址位设置为零。

select set_masklen(cidr '192.168.1.0/24', 16);

text ( inet ) → text
以文本形式返回未缩写的 IP 地址和网络掩码长度。(这与显式转换为文本具有相同的结果。)

select text(inet '192.168.1.5');

abbrev ( inet ) → text
创建一个作为文本的缩写显示格式。(结果与 inet 输出函数产生的结果相同;它只是与显式转换为文本的结果相比“缩写”,由于历史原因,它永远不会显示网络掩码部分。)

select abbrev(inet '10.1.0.0/32');

abbrev ( cidr ) → text
创建一个作为文本的缩写显示格式。

select abbrev(cidr '10.1.0.0/16');

trunc ( macaddr ) → macaddr
将地址的最后 3 个字节设置为零。剩余的前缀可以与特定的制造商相关联(使用 PostgreSQL 中未包含的数据)。

select trunc(macaddr '12:34:56:78:90:ab');

trunc ( macaddr8 ) → macaddr8
将地址的最后 5 个字节设置为零。剩余的前缀可以与特定的制造商相关联(使用 PostgreSQL 中未包含的数据)。

select trunc(macaddr8 '12:34:56:78:90:ab:cd:ef') ;

macaddr8_set7bit ( macaddr8 ) → macaddr8
将地址的第 7 位设置为 1,创建所谓的修改后的 EUI-64,以包含在 IPv6 地址中。

select macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef');

posted @ 2022-09-10 19:49  shigp1  阅读(246)  评论(0编辑  收藏  举报