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



我在 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()不是正确的工具。

相关内容

  • 没有找到相关文章

最新更新