我在 Postgres 9.5 中有一个数组列z
的表t
。我想选择z
NULL
或{NULL}
的id
。
id | z
---+--------
1 | {NULL}
2 | null
见 DBFIDDLE
我尝试将{NULL}
更改为NULL
array_remove()
:
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<>小提琴在这里
'{NULL}'
是一个(非类型化)数组文本,与 ARRAY[NULL]
生成的值相同 - 默认为数据类型 text[]
,没有显式输入类型或强制转换。 以上适用于任何数组类型:int[]
、date[]
、...因为文字被隐式地强制为z
的类型。
空数组('{}'
)或包含1个或多个NULL 元素('{NULL}'
)的数组与NULL
不同,array_remove()
不是正确的工具。