我尝试使用JSONB字段中的值创建PostgreSQL数组。
当所有数据都在JSONB中时,结果很好。这个查询:
SELECT array [
(SELECT ('{"tech_id": 4, "admin_id": 5}'::jsonb->>'admin_id')::int),
(SELECT ('{"tech_id": 4, "admin_id": 5}'::jsonb->>'tech_id')::int)
];
返回正确的结果,因为 admin_id 和 tech_id 位于JSONB字段中:
-[ RECORD 1 ]
array | {5,4}
但是,如果JSONB只包含一个值,则该数组包含NULL值。 这个查询:
SELECT array [
(SELECT ('{"tech_id": 4}'::jsonb->>'admin_id')::int),
(SELECT ('{"tech_id": 4}'::jsonb->>'tech_id')::int)
];
给我这个结果:
-[ RECORD 1 ]---
array | {NULL,4}
但我想要一个像 {4} 这样的数组,所以没有NULL值。 你知道在这种情况下避免添加NULL值的方法吗?
答案 0 :(得分:0)
Finnaly,我通过包装数组来检查值是否为NULL来找到解决方案。 我使用以下代码:
select array_agg(id) FROM unnest(array [
(SELECT ('{"tech_id": 4}'::jsonb->>'admin_id')::int),
(SELECT ('{"tech_id": 4}'::jsonb->>'tech_id')::int)
]) as id where id IS NOT NULL;
PostgreSQL返回预期结果:
-[ RECORD 1 ]--
array_agg | {4}