我有一个包含 IP 地址及其网络掩码的表,现在我想从表中按网络地址选择位于同一网络中的 IP。
ip_adress | netmask
----------------|-----------
192.168.13.25 | 29
192.168.13.26 | 29
192.168.13.1 | 30
192.168.13.2 | 30
Run Code Online (Sandbox Code Playgroud)
例如,我想要表中网络地址 192.168.13.24/29 中的 IP:
ip_adress | netmask
----------------|-----------
192.168.13.25 | 29
192.168.13.26 | 29
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 实际上有一个本机inet类型,用于将 IP 地址及其网络掩码存储在单个字段中,以及用于匹配这些地址的专用运算符。
例子:
test=# \d inetdemo
Table "public.inetdemo"
Column | Type | Modifiers
--------+------+-----------
addr | inet |
test=# select * from inetdemo;
addr
------------------
192.168.13.25/29
192.168.13.26/29
192.168.13.1/30
192.168.13.2/30
(4 rows)
test=# select * from inetdemo where addr >>= '192.168.13.25/29';
addr
------------------
192.168.13.25/29
192.168.13.26/29
(2 rows)
Run Code Online (Sandbox Code Playgroud)
对于完整的故事,本页解释了inet数据类型(及其兄弟,cidr,这不是您需要的),而本页inet解释了您可以在数据类型上使用的运算符和函数cidr。如果您需要能够分别获取 IP 地址和/或网络掩码,请记下masklen和函数:host
test=# select host(addr) as "ip_address", masklen(addr) as "netmask" from inetdemo;
ip_address | netmask
---------------+---------
192.168.13.25 | 29
192.168.13.26 | 29
192.168.13.1 | 30
192.168.13.2 | 30
(4 rows)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |