moo*_*hot 1 arrays postgresql null
我在 Postgres 9.5中t有一个带有数组列的表z。我想选择id其中z要么是NULLOR {NULL}。
id | z
---+--------
1 | {NULL}
2 | null
Run Code Online (Sandbox Code Playgroud)
我试图改变{NULL}到NULL以array_remove():
SELECT id,
array_remove(z,NULL) as removed
from t;
Run Code Online (Sandbox Code Playgroud)
返回:
id | z | removed
---+--------+-------
1 | {NULL} | {}
2 | null | null
Run Code Online (Sandbox Code Playgroud)
但是,如果我查询这个:
select id, z from t where removed is null;
Run Code Online (Sandbox Code Playgroud)
我仍然得到 id 1。理想情况下,我想避免取消嵌套和分组备份。
要将具有单个 NULL 元素 ( '{NULL}')的数组替换为NULL,我建议NULLIF:
SELECT id, NULLIF(z, '{NULL}') AS z
FROM t;
Run Code Online (Sandbox Code Playgroud)
db<>在这里摆弄
'{NULL}'是一个(无类型的)数组字面量,并且与产生的值相同 ARRAY[NULL]- 默认为text[]没有显式输入类型或强制转换的数据类型。以上适用于任何数组类型:int[], date[], ... 因为文字被z隐式强制转换为类型。
空数组 ( '{}') 或具有 1 个或多个 NULL 元素的数组 ( '{NULL}') 与 不同NULL,array_remove()不是正确的工具。