跳转至

网络地址函数和操作符

网络地址函数和操作符

cidrinet操作符

下文展示了可以用于cidrinet类型的操作符。 操作符<<<<=>>>>=&&测试用于子网包含。它们只考虑两个地址的网络部分(忽略任何主机部分),然后判断其中一个网络部分是等于另外一个或者是 另外一个的子网。

<
描述
小于
示例
``` 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) ```

cidrinet函数

下文展示了所有可以用于cidrinet类型的函数。函数abbrevhosttext主要是为了提供可选的显示格式用的。

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值(也有独立的用于inetcidr的函数,因为它的行为应当和这两种情况不同)。inet值也可以转换为cidr值。完成时,该网络掩码右侧的任何位都将无声地转换为零以获得一个有效的cidr值。另外,你还可以使用常规的造型语法将一个文本字符串转换为inetcidr值:例如,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:fe🆎cd:ef (1 row) ```