获取json列键为空的记录

mor*_*oth 23 postgresql json

我有usersjson列的表details.

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

这不起作用:

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

ERROR: operator does not exist: json -> boolean

Rom*_*kar 57

使用括号().看起来编译器试图看到它details->('email' IS NOT NULL).所以你可以像这样解决它:

select *
from users
where (details->'email') is not null
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo

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

select *
from users
where (details->>'email') is null
Run Code Online (Sandbox Code Playgroud)

本答案所述.


poz*_*ozs 9

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

select *
from users
where (details->>'email') is not null
Run Code Online (Sandbox Code Playgroud)

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

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