将Postgres ARRAY中的{NULL}更改为NULL

时间:2019-01-05 20:14:59

标签: arrays postgresql null

在Postgres 9.5中,我有表t和一个数组列z。我想选择idzNULL的{​​{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。理想情况下,我希望避免取消嵌套和分组备份。

1 个答案:

答案 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()不是正确的工具