相关文章推荐
斯文的杯子  ·  腾讯云智能命题策略单·  1 年前    · 
斯文的电影票  ·  【阿里云OSS】403错误,AccessDe ...·  1 年前    · 
逆袭的创口贴  ·  Excel如何将不同姓名长度保证同样长度?- ...·  1 年前    · 
爱玩的茄子  ·  Selenium+Chrome浏览器环境搭建 ...·  2 年前    · 
Code  ›  如何查询json字段类型postgresql中的空值?开发者社区
https://cloud.tencent.com/developer/ask/sof/101985838
性感的椅子
1 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 如何查询json字段类型postgresql中的空值?

Stack Overflow用户
提问于 2013-10-17 17:16:44
EN

我在postgresql中有一个json类型字段。但是,我不能选择特定字段为空的行:

代码:

代码语言: javascript
复制
SELECT *
FROM   json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ,
{"name2": "Zaphod", "occupation2": null} ]'  ) AS elem
where elem#>'{occupation2}' is null

这应该可以工作,但我得到了这个错误:

代码语言: javascript
复制
ERROR:  operator does not exist: json #> boolean
LINE 6: where elem#>'{occupation2}' is null
4 63.7K 0 票数 52
EN
sql
json
postgresql

回答 4

Stack Overflow用户

发布于 2013-10-17 20:35:23

您可以利用 elem->'occupation2' 返回 json 类型的字符串 null 这一事实,因此您的查询将是:

代码语言: javascript
复制
select
from  json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ,
    {"name2": "Zaphod", "occupation2": null} ]'
) as elem
where (elem->'occupation2')::text = 'null'
{"name2": "Zaphod", "occupation2": null}

如果你想得到所有的元素,在JSON中值为 null 或者key不存在,你可以这样做:

代码语言: javascript
复制
select
from  json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ,
    {"name2": "Zaphod", "occupation2": null} ]'
) as elem
where (elem->>'occupation2') is null
{"name": "Toby", "occupation": "Software Engineer"}
{"name": "Zaphod", "occupation": "Galactic President"}
{"name2": "Zaphod", "occupation2": null}
票数 68
EN

Stack Overflow用户

发布于 2016-01-28 22:56:35

如果您要在json-blob中搜索空值,则可能需要考虑使用Postgres9.4中引入的函数 json_typeof(json) :

代码语言: javascript
复制
INSERT INTO table
  VALUES ('{ "value": "some", "object": {"int": 1, "nullValue": null}}');
SELECT * FROM table
  WHERE json_typeof(json->'object'->'nullValue') = 'null';

这将导致您找到NULL值的条目。

希望这能有所帮助!

参考: http://www.postgresql.org/docs/9.4/static/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE

票数 12
EN

Stack Overflow用户

发布于 2017-07-11 07:22:24

来自@roman-pekar和@mraxus的答案很有帮助,但我并不满意,因为我没有能力清楚地区分未定义和空...所以,我想出了:

代码语言: javascript
复制
CREATE OR REPLACE FUNCTION isnull (element json)
RETURNS boolean AS $$
 
推荐文章
斯文的杯子  ·  腾讯云智能命题策略单
1 年前
斯文的电影票  ·  【阿里云OSS】403错误,AccessDenied:The bucket you access does not belong to you._oss accessdenied_sayyy的博客-C
1 年前
逆袭的创口贴  ·  Excel如何将不同姓名长度保证同样长度?-百度经验
1 年前
爱玩的茄子  ·  Selenium+Chrome浏览器环境搭建 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号