我正在尝试在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[]
答案 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
...