选择其中列与inet []数组中的任何IP地址匹配的行

时间:2019-04-28 18:12:31

标签: postgresql postgres-9.6

我正在尝试在inet[]类型列中显示至少具有一个值的行。

我真的不知道更好,所以使用这样的方法似乎最容易,但是它返回的结果是{},根据{{1 }}类型,但不是从null查询的角度来看?

inet[]

因此,我想尝试进一步研究,也许我可以尝试匹配is not null列中任何有效IP地址的存在,那会起作用,但是我遇到了一个错误,并且我不明白它指的是什么或如何解决它以达到期望的结果:

peering_manager=# select asn,name,potential_internet_exchange_peering_sessions from peering_autonomoussystem where potential_internet_exchange_peering_sessions is not null order by potential_internet_exchange_peering_sessions limit 1;
 asn  |              name               | potential_internet_exchange_peering_sessions
------+---------------------------------+----------------------------------------------
 6128 | Cablevision Systems Corporation | {}
(1 row)

peering_manager=#

也许是说inet[]运算符对于peering_manager=# select asn,name,potential_internet_exchange_peering_sessions from peering_autonomoussystem where potential_internet_exchange_peering_sessions << inet '0.0.0.0/0'; ERROR: operator does not exist: inet[] << inet LINE 1: ...here potential_internet_exchange_peering_sessions << inet '0... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. peering_manager=# 类型是无效的,或者<<运算符在尝试从查询中查询inet[]类型时是无效的操作值存储为<<类型?还是其他?

无论如何,我有点迷路。也许有更好的方法可以做到这一点?

这是表格,还有我正在使用的数据集的示例。

inet
inet[]

2 个答案:

答案 0 :(得分:1)

您可以使用array_length()。对于空数组或null,它将返回NULL

...
WHERE array_length(potential_internet_exchange_peering_sessions, 1) IS NOT NULL
...

答案 1 :(得分:0)

更好地比较数组长度和整数

...
WHERE array_length(potential_internet_exchange_peering_sessions, 1) > 0
...