在Postgres 9.5中,我有表t
和一个数组列z
。我想选择id
为z
或NULL
的{{1}}。
{NULL}
请参见DBFIDDLE
我尝试使用id | z
---+--------
1 | {NULL}
2 | null
将{NULL}
更改为NULL
:
array_remove()
返回:
SELECT id,
array_remove(z,NULL) as removed
from t;
但是,如果我查询以下内容:
id | z | removed
---+--------+-------
1 | {NULL} | {}
2 | null | null
我仍然获得ID1。理想情况下,我希望避免取消嵌套和分组备份。
答案 0 :(得分:2)
要 用'{NULL}'
将具有单个NULL元素(NULL
)的数组替换,我建议使用NULLIF
:>
SELECT id, NULLIF(z, '{NULL}') AS z
FROM t;
db <>提琴here
'{NULL}'
是(无类型的)array literal,并且具有与ARRAY[NULL]
相同的值-默认为数据类型text[]
,而没有显式输入类型或强制类型转换。上面的方法适用于 any 数组类型:int[]
,date[]
,...,因为文字被隐式强制为z
类型。
一个空数组('{}'
)或具有1个或多个NULL元素的数组('{NULL}'
)与NULL
不同,array_remove()
不是正确的工具