我在 Postgres 9.5 中有一个表 t
,其中包含一个数组列 z
。我想选择 id
,其中 z
是 NULL
或 {NULL}
。
id | z
---+--------
1 | {NULL}
2 | null
参见 DBFIDDLE
我尝试使用 array_remove()
将 {NULL}
更改为 NULL
:
SELECT id,
array_remove(z,NULL) as removed
from t;
返回:
id | z | removed
---+--------+-------
1 | {NULL} | {}
2 | null | null
但是,如果我这样查询:
select id, z from t where removed is null;
我仍然得到 id 1。理想情况下,我想避免取消嵌套和分组备份。
最佳答案
要用 NULL
替换具有单个 NULL 元素 ('{NULL}'
) 的数组,我建议 NULLIF
:
SELECT id, NULLIF(z, '{NULL}') AS z
FROM t;
db<> fiddle here
'{NULL}'
是一个(未类型化的)array literal和 ARRAY[NULL]
的结果相同的值 - 默认为数据类型 text[]
没有显式输入类型或转换。以上适用于 any 数组类型:int[]
、date[]
,...因为文字被强制转换为 z
隐含地。
空数组('{}'
)或包含 1 个或多个 NULL 元素的数组('{NULL}'
)与 不同NULL
,array_remove()
不是正确的工具。
关于arrays - 将 Postgres ARRAY 中的 {NULL} 更改为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055861/