我有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)
实际上,要获取详细信息["email"]为空或电子邮件密钥不存在的记录,您可以使用此查询:
select *
from users
where (details->>'email') is null
Run Code Online (Sandbox Code Playgroud)
如本答案所述.
您需要使用->>运算符:
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
| 归档时间: |
|
| 查看次数: |
15994 次 |
| 最近记录: |