我正在尝试以下查询:
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值都不能转换成浮点数,但在这种情况下我知道lats都是JSON数.
是否有一个函数将jsonb值转换为浮点数(或为uncastable返回NULL)?
有两种操作可以从JSON获取值.第一个 – >将返回JSON.第二个 – >>将返回文字.
细节:JSON Functions and Operators
尝试
SELECT (json_data->'position'->>'lat')::float + 1.0 AS lat FROM updates LIMIT 5