我有json列users
的表details
。
我想获取所有用户记录,其中详细信息[" email"]为空或电子邮件密钥不存在。
这不起作用:
SELECT users.* FROM users where details->'email' IS NOT NULL;
ERROR: operator does not exist: json -> boolean
答案 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值。