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

标签 arrays postgresql null

我在 Postgres 9.5 中有一个表 t,其中包含一个数组列 z。我想选择 id,其中 zNULL{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 literalARRAY[NULL] 的结果相同的值 - 默认为数据类型 text[] 没有显式输入类型或转换。以上适用于 any 数组类型:int[]date[],...因为文字被强制转换为 z 隐含地。

空数组('{}')或包含 1 个或多个 NULL 元素的数组('{NULL}')与 不同NULLarray_remove() 不是正确的工具。

关于arrays - 将 Postgres ARRAY 中的 {NULL} 更改为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055861/

相关文章:

sql - 计算外环的角度 PostGIS(多边形和多边形)

删除/插入行的 SQL CTE 语法

MySQL之谜: Null value is not different from non-null string

php - 如何正确使用数组

ruby-on-rails - ActiveRecord::ConnectionTimeoutError 与 Heroku

sql - 如果 T-SQL 中记录为 NULL,如何替换字符串

Swift:在运行时在非可选中检测到意外的 nil 值:强制转换为可选失败

javascript - 基于嵌套数组中匹配值的angularjs过滤器

java - 我无法使用 Pattern.compile 获取 url

c - 指向函数的结构体指针未初始化