网络地址函数和操作符
网络地址函数和操作符¶
cidr和inet操作符¶
下文展示了可以用于cidr和inet类型的操作符。 操作符<<、<<=、 >>、>>=和 &&测试用于子网包含。它们只考虑两个地址的网络部分(忽略任何主机部分),然后判断其中一个网络部分是等于另外一个或者是 另外一个的子网。
<¶
- 描述
- 小于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.5' < inet '192.168.1.6' ;
?column?
t (1 row) ```
<=¶
- 描述
- 小于等于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.5' <= inet '192.168.1.5';
?column?
t (1 row) ```
=¶
- 描述
- 等于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.5' = inet '192.168.1.5';
?column?
t (1 row) ```
>=¶
- 描述
- 大于等于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.5' >= inet '192.168.1.5';
?column?
t (1 row) ```
>¶
- 描述
- 大于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.5' > inet '192.168.1.4';
?column?
t (1 row) ```
<>¶
- 描述
- 不等于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.5' <> inet '192.168.1.4';
?column?
t (1 row) ```
<<¶
- 描述
- 被包含在内
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.5' << inet '192.168.1/24';
?column?
t (1 row) ```
<<=¶
- 描述
-
- 被包含在内或等于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1/24' <<= inet '192.168.1/24';
?column?
t (1 row) ```
>>¶
- 描述
- 包含
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1/24' >> inet '192.168.1.5';
?column?
t (1 row) ```
>>=¶
- 描述
- 包含或等于
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1/24' >>= inet '192.168.1/24';
?column?
t (1 row) ```
&&¶
- 描述
- 包含或者被包含contains or is contained by
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1/24' && inet '192.168.1.80/28';
?column?
t (1 row) ```
~¶
- 描述
- 按位 NOT
- 示例
- ``` sql
seaboxsql=# select ~ inet '192.168.1.6';
?column?
63.87.254.249 (1 row) ```
&¶
- 描述
- 按位 AND
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.6' & inet '0.0.0.255';
?column?
0.0.0.6 (1 row) ```
|¶
- 描述
- 按位 OR
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.6' | inet '0.0.0.255';
?column?
192.168.1.255 (1 row) ```
+¶
- 描述
-
- 加
- 示例
- ``` sql
seaboxsql=# select inet '192.168.1.6' + 25;
?column?
192.168.1.31 (1 row) ```
-¶
- 描述
- 减
- 示例
-
``` sql seaboxsql=# select inet '192.168.1.43' - 36; ?column?
192.168.1.7 (1 row)seaboxsql=# select inet '192.168.1.43' - inet '192.168.1.19'; ?column?
24(1 row) ```
cidr和inet函数¶
下文展示了所有可以用于cidr和inet类型的函数。函数abbrev、host和text主要是为了提供可选的显示格式用的。
abbrev()¶
- 语法
abbrev(inet/cidr)- 返回类型
text- 描述
- 缩写显示格式文本
- 示例
-
``` sql seaboxsql=# select abbrev(inet '10.1.0.0/16'); abbrev
10.1.0.0/16 (1 row)seaboxsql=# select abbrev(cidr '10.1.0.0/16'); abbrev
10.1/16 (1 row) ```
broadcast()¶
- 语法
broadcast(inet)- 返回类型
inet- 描述
- 网络广播地址
- 示例
- ``` sql
seaboxsql=# select broadcast('192.168.1.5/24');
broadcast
192.168.1.255/24 (1 row) ```
family()¶
- 语法
family(inet)- 返回类型
int- 描述
- 抽取地址族;
4为 IPv4,6为 IPv6 - 示例
- ``` sql
seaboxsql=# select family('::1');
family
6 (1 row) ```
host()¶
- 语法
host(inet)- 返回类型
text- 描述
- 抽取 IP 地址为文本
- 示例
- ``` sql
seaboxsql=# select host('192.168.1.5/24');
host
192.168.1.5 (1 row) ```
hostmask()¶
- 语法
hostmask(inet)- 返回类型
inet- 描述
- 为网络构造主机掩码
- 示例
- ``` sql
seaboxsql=# select hostmask('192.168.23.20/30');
hostmask
0.0.0.3 (1 row) ```
masklen()¶
- 语法
masklen(inet)- 返回类型
int- 描述
- 抽取网络掩码长度
- 示例
- ``` sql
seaboxsql=# select masklen('192.168.1.5/24');
masklen
24 (1 row) ```
netmask()¶
- 语法
netmask(inet)- 返回类型
inet- 描述
- 为网络构造网络掩码
- 示例
- ``` sql
select netmask('192.168.1.5/24');
netmask
255.255.255.0 (1 row) ```
network()¶
- 语法
network(inet)- 返回类型
cidr- 描述
- 抽取地址的网络部分
- 示例
- ``` sql
seaboxsql=# select network('192.168.1.5/24');
network
192.168.1.0/24 (1 row) ```
set_masklen()¶
- 语法
set_masklen(inet/cidr,int)- 返回类型
inet- 描述
- 为
inet或者cidr值值设置网络掩码长度 - 示例
-
``` sql seaboxsql=# select set_masklen('192.168.1.5/24', 16); set_masklen
192.168.1.5/16 (1 row)seaboxsql=# select set_masklen('192.168.1.0/24'::cidr, 16); set_masklen
192.168.0.0/16 (1 row) ```
text()¶
- 语法
text(inet)- 返回类型
text- 描述
- 抽取 IP 地址和网络掩码长度为文本
- 示例
- ``` sql
seaboxsql=# select text(inet '192.168.1.5');
text
192.168.1.5/32 (1 row) ```
inet_same_family()¶
- 语法
inet_same_family(inet,inet)- 返回类型
boolean- 描述
- 地址是来自于同一个家族吗?
- 示例
- ``` sql
seaboxsql=# select inet_same_family('192.168.1.5/24', '::1');
inet_same_family
f (1 row) ```
inet_merge()¶
- 语法
inet_merge(inet, inet)- 返回类型
cidr- 描述
- 包括给定网络的最小网络
- 示例
- ``` sql
seaboxsql=# select inet_merge('192.168.1.5/24', '192.168.2.5/24');
inet_merge
192.168.0.0/22 (1 row) ``` - 注意
- 任何
cidr值都能够被隐式或显式地转换为inet值,因此上述能够操作inet值的函数也同样能够操作cidr值(也有独立的用于inet和cidr的函数,因为它的行为应当和这两种情况不同)。inet值也可以转换为cidr值。完成时,该网络掩码右侧的任何位都将无声地转换为零以获得一个有效的cidr值。另外,你还可以使用常规的造型语法将一个文本字符串转换为inet或cidr值:例如,inet(expression)或colname::cidr。
macaddr/macaddr8函数¶
macaddr/macaddr8类型支持标准关系操作符 (>、<=等) 用于编辑次序,并且按位算术操作符(~、&和|)用于NOT、AND 和 OR。
下文展示了可以用于macaddr/macaddr8类型的函数。
trunc()¶
- 语法
trunc(macaddr/macaddr8)- 返回类型
macaddr/macaddr8- 描述
- 参数为
macaddr时返回一个 MAC 地址,该地址的最后三个字节设置为零;参数为macaddr8时返回一个后五个字节设置为零的MAC地址。这可以被用来为一个制造商关联一个前缀。 - 示例
-
``` sql seaboxsql=# select trunc(macaddr '12:34:56:78:90:ab'); trunc
12:34:56:00:00:00 (1 row)seaboxsql=# select trunc(macaddr8 '12:34:56:78:90
cd:ef'); trunc
12:34:56:00:00:00:00:00 (1 row) ```
macaddr8_set7bit()¶
- 语法
macaddr8_set7bit(macaddr8)- 返回类型
macaddr8- 描述
- 设置第7位为一,也被称为修改版的EUI-64,用于内含在IPv6地址中
- 示例
- ``` sql
seaboxsql=# select macaddr8_set7bit(macaddr8 '00:34:56
cd:ef'); macaddr8_set7bit
02:34:56:ff:fecd:ef (1 row) ```