我正在尝试以下查询:
SELECT (json_data->'position'->'lat') + 1.0 AS lat FROM updates LIMIT 5;
(+1.0仅用于强制转换浮动。我的实际查询要复杂得多,此查询只是问题的测试用例。)
我得到了错误:
ERROR: operator does not exist: jsonb + numeric
如果我添加显式强制转换:
SELECT (json_data->'position'->'lat')::float + 1.0 AS lat FROM updates LIMIT 5;
错误变为:
ERROR: operator does not exist: jsonb + double precesion
我知道大多数jsonb值不能转换为浮点数,但是在这种情况下,我知道纬度都是JSON编号。
是否有一个将jsonb值强制转换为浮点数(或为不可广播的返回NULL)的函数?
要从中获得价值,有两种操作JSON。第一个->将返回JSON。第二个->>将返回文本。
JSON
->
->>
详细信息:JSON函数和运算符
尝试
SELECT (json_data->'position'->>'lat')::float + 1.0 AS lat FROM updates LIMIT 5