gpt4 book ai didi

postgresql - 从 Postgres 的 JSONB 字段中选择不为空的值

转载 作者:行者123 更新时间:2023-11-29 11:14:50 25 4
gpt4 key购买 nike

我无法从 Postgres 9.5 的 JSONB 字段内的属性中选择非空值

SELECT data->>'property' FROM mytable WHERE data->>'property' IS NOT NULL;

我也试过使用 NOTNULL。

当我运行其中任何一个时,我收到错误 42883。 “错误:运算符不存在。JSONB->> bool 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。”

最佳答案

我很快测试了你的问题,没有发现问题:

patrick@brick:~$ psql -d test
psql (9.5.0)
Type "help" for help.

test=# CREATE TABLE mytable (id serial PRIMARY KEY, data jsonb);
CREATE TABLE
test=# INSERT INTO mytable (data) VALUES
('{"ip": "192.168.0.1", "property": "router"}'),
('{"ip": "127.0.0.1", "property": "localhost"}'),
('{"ip": "192.168.0.15", <b>"property": null</b>}');
INSERT 0 3
test=# SELECT * FROM mytable;
id | data
----+----------------------------------------------
1 | {"ip": "192.168.0.1", "property": "router"}
2 | {"ip": "127.0.0.1", "property": "localhost"}
3 | {"ip": "192.168.0.15", <b>"property": null</b>}
(3 rows)

test=# SELECT data->>'property' FROM mytable WHERE data->>'property' IS NOT NULL;
?column?
-----------
router
localhost
(2 rows)

请注意,在 jsonb 中一个NULL值应该在输入时精确指定(如上面的示例),而不是在某些引用的版本中。如果该值不是 NULL但是一个空字符串或类似 '<null>' 的东西(一个字符串)那么你应该调整你的测试来寻找那个:WHERE data->>'property' = '' .如果是这种情况,您可以考虑使用 jsonb_set()将这些值设置为真正的 json null .

顺便说一句,你也可以这样做:

SELECT data->>'property' FROM mytable WHERE <b>data->'property'</b> IS NOT NULL;

即测试 jsonb NULL 的值而不是将其转换为 text .更有效,当然是在更大的 table 上。这显然只适用于 true null

关于postgresql - 从 Postgres 的 JSONB 字段中选择不为空的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34984938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com