1

假设我有一个 json 列字段,如下所示:

 {phone: 5555555555, address: "55 awesome street", hair_color: "green"}

我想做的是更新所有存在 json key phone 的条目,结果是 number 类型的字符串。

我所拥有的是:

 SELECT *
 FROM parent_object
 WHERE (fields->'phone') IS NOT NULL;

不幸的是,这仍然返回值 where phone:null。我猜 JSONnull不等同于 SQL NULL

我该怎么做 1) 如何排除 JSON 空值 AND (fields->'phone') <> null产生

 LINE 4: ...phone') IS NOT NULL AND (fields->'phone') <> 'null';
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

2)检查那个键的值的类型,这个伪代码(type_of (fields->'phone') == Integer)但是在工作的PGSQL中。

3)修改此以更新列

 UPDATE parent_object
 SET fields.phone = to_char(fields.phone)
 WHERE  query defined above
4

1 回答 1

1
  1. 正如其他人所说,没有理由将变量转换为整数,只是为了将其转换为字符串。此外,电话号码不是数字。:-)

  2. 您需要使用->>运算符而不是->. 这与IS NOT NULL您的 SELECT 查询一起工作。

    请注意运行此查询后两个元组值之间的差异:

    SELECT fields->'phone', fields->>'phone'
    FROM parent_object;
    

    您的工作查询:

    SELECT *
    FROM parent_object
    WHERE (fields->>'phone') IS NOT NULL;
    
  3. Postgres 当前不支持以原子方式更新 JSON 列中的单个键。您可以编写包装器 UDF 来为您提供此功能:如何修改新 PostgreSQL JSON 数据类型中的字段?

于 2014-11-18T17:24:31.120 回答