获取json列键为空的记录

时间:2014-05-28 12:33:28

标签: json postgresql

我有json列users的表details

我想获取所有用户记录,其中详细信息[&#​​34; email"]为空或电子邮件密钥不存在。

这不起作用:

SELECT users.* FROM users where details->'email' IS NOT NULL;

ERROR: operator does not exist: json -> boolean

2 个答案:

答案 0 :(得分:56)

使用方括号()。看起来编译器尝试将其视为details->('email' IS NOT NULL)。所以你可以像这样解决它:

select *
from users
where (details->'email') is not null

<强> sql fiddle demo

实际上,要获取详细信息[&#​​34; email&#34;]为空或电子邮件密钥不存在的记录,您可以使用此查询:

select *
from users
where (details->>'email') is null

this answer中所述。

答案 1 :(得分:8)

您需要使用->>运算符:

select *
from users
where (details->>'email') is not null

因为->运算符返回'null'::json(而不是sql NULL),如果键存在但是json为null值。

http://sqlfiddle.com/#!15/76ec4/2