假设我有一个json列字段,如下所示:
{phone: 5555555555, address: "55 awesome street", hair_color: "green"}
我想要做的是更新所有存在json手机的条目,结果类型为字符串 .
我有的是:
SELECT *
FROM parent_object
WHERE (fields->'phone') IS NOT NULL;
不幸的是,这仍然会返回 phone:null
的值 . 我猜JSON null
不等同于SQL NULL
.
我如何1)如何排除 AND (fields->'phone') <> null
产生的JSON空值
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
1 回答
正如其他人所说,没有理由将变量转换为整数,只是将它转换为字符串 . 此外,电话号码不是数字 . :-)
您需要使用
->>
运算符而不是->
. 与IS NOT NULL
一起使您的SELECT查询正常工作 .注意运行此查询后两个元组值之间的差异:
您的工作查询: