我正在尝试以下查询:
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)?
try_cast
函数。你需要自己编写它们。 - Ihor Romanchenko