Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

9.12. #网络地址函数和运算符

IP 网络地址类型(cidrinet)支持 表 9.1 中所示的常用比较运算符,以及 表 9.39表 9.40 中所示的特殊运算符和函数。

任何 cidr 值都可以隐式转换为 inet;因此,下面显示的作为对 inet 进行操作的运算符和函数也适用于 cidr 值。(存在针对 inetcidr 的独立函数,这是因为这两者的行为应有所不同。)此外,允许将 inet 值转换为 cidr。执行此操作时,将静默地将掩码网络右边的任何位清零,以创建一个有效的 cidr 值。

表 9.39。IP 地址运算符

运算符

说明

示例

inet << inet布尔值

子网是否严格包含在子网中?此运算符和接下来的四个运算符用于测试子网的包容性。它们只考虑两个地址的网络部分(忽略掩码网络右边的任何位),并确定一个网络是否与另一个相同,或者是否为另一个网络的子网。

inet '192.168.1.5' << inet '192.168.1/24't

inet '192.168.0.5' << inet '192.168.1/24'f

inet '192.168.1/24' << inet '192.168.1/24'f

inet <<= inet布尔值

子网是否包含在子网中或者与子网相等?

inet '192.168.1/24' <<= inet '192.168.1/24't

inet >> inet布尔值

子网是否严格包含子网?

inet '192.168.1/24' >> inet '192.168.1.5't

inet >>= inet布尔值

子网是否包含或等于子网?

inet '192.168.1/24' >>= inet '192.168.1/24't

inet && inet布尔值

任一子网是否包含或等于另一个?

inet '192.168.1/24' && inet '192.168.1.80/28't

inet '192.168.1/24' && inet '192.168.2.0/28'f

~ inetinet

计算按位 NOT。

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

计算按位 AND。

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

计算按位 OR。

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

向某个地址添加一个偏移量。

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

向某个地址添加一个偏移量。

200 + inet '::ffff:fff0:1'::ffff:255.240.0.201

inet - bigintinet

从某个地址减去一个偏移量。

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

计算两个地址的差值。

inet '192.168.1.43' - inet '192.168.1.19'24

inet '::1' - inet '::ffff:1'-4294901760


表 9.40 IP 地址函数

函数

说明

示例

abbrev ( inet ) → text

创建缩写显示格式作为文本。(结果与 inet 输出函数生成的结果相同;它只在与明确强制转换成 text 的结果相比时才“缩写”,出于历史原因,该转换永远不会去掉网络掩码部分。)

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

创建缩写显示格式作为文本。(缩写包括:去掉网络掩码右侧的所有零八位组;更多示例参见 表 8.22。)

abbrev(cidr '10.1.0.0/16')10.1/16

broadcast ( inet ) → inet

计算某个地址网络的广播地址。

broadcast(inet '192.168.1.5/24')192.168.1.255/24

family ( inet ) → integer

返回地址的族:IPv4 为 4,IPv6 为 6

family(inet '::1')6

host ( inet ) → text

返回 IP 地址文本,忽略 netmask。

host(inet '192.168.1.0/24')192.168.1.0

hostmask ( inet ) → inet

计算地址网络的主机掩码。

hostmask(inet '192.168.23.20/30')0.0.0.3

inet_merge ( inet, inet ) → cidr

计算包含给定两个网络的最小网络。

inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24')192.168.0.0/22

inet_same_family ( inet, inet ) → boolean

测试地址是否属于同一 IP 族。

inet_same_family(inet '192.168.1.5/24', inet '::1')f

masklen ( inet ) → integer

返回 netmask 长度,以比特为单位。

masklen(inet '192.168.1.5/24')24

netmask ( inet ) → inet

计算地址网络的网络掩码。

netmask(inet '192.168.1.5/24')255.255.255.0

network ( inet ) → cidr

返回地址的网络部分,把 netmask 右侧的内容归零。(这相当于把值强制转换成 cidr。)

network(inet '192.168.1.5/24')192.168.1.0/24

set_masklen ( inet, integer ) → inet

设置 inet 值的 netmask 长度。地址部分不会更改。

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

设置掩码长 ( 无类型地址, 整数 ) → 无类型地址

设置 无类型地址 值的网络掩码长度。新网络掩码右边的地址位被设置为零。

set_masklen(CIDR '192.168.1.0/24', 16)192.168.0.0/16

文本 ( 互联网 ) → 文本

返回未缩写的 IP 地址和网络掩码长度(这与显式强制转换为 text 的结果相同)。

text(inet '192.168.1.5')192.168.1.5/32


提示

abbrevhosttext 函数主要用于为 IP 地址提供备用显示格式。

MAC 地址类型 MAC 地址MAC 地址 8 支持 表 9.1 中所示的常见比较运算符,以及 表 9.41 中所示的专门函数。此外,它们还支持按位逻辑运算符 ~|(非、与和或),就像上面为 IP 地址所示的那样。

表 9.41、MAC 地址函数

函数

说明

示例

trunc ( MAC 地址 ) → MAC 地址

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

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

trunc ( MAC 地址 8 ) → MAC 地址 8

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

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

macaddr8_set7bit ( MAC 地址 8 ) → MAC 地址 8

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

macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')02:34:56:ff:fe:ab:cd:ef