我正在try 以下查询:

SELECT (json_data->'position'->'lat') + 1.0 AS lat FROM updates LIMIT 5;

(+1.0只是用来强制转换为float.我的实际查询要复杂得多,这个查询只是这个问题的一个测试用例.)

我得到了一个错误:

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值不能转换成浮点数,但在这种情况下,我知道LAT都是JSON数.

是否有一个函数可以将jsonb值强制转换为浮点值(或为不可定值返回null)?

推荐答案

有两个操作可以从JSON中获取值.第一个->将返回JSON.第二个将返回文本.

详情:JSON Functions and Operators

try

SELECT (json_data->'position'->>'lat')::float + 1.0 AS lat
FROM updates
LIMIT 5

Sql相关问答推荐

在数据分区内执行确定

获取每个帖子的匹配关键字列表

对于表A中的每一行,更新表B中与金额有关的行

Postgres trunc_date删除一个月

为什么Prisma生成唯一索引,而不是基于方案上的唯一列约束?

如何使用ROW_NUM() Select 一个没有第二条记录的实例?

如何优化我的功能以减少花费的时间?

部分匹配表中元素的MariaDB查询查找结果

仅在特定字符串之后提取两个圆括号之间的计量单位文本

为什么我的SQL标量函数有时会抛出";子查询返回多个值.这是不允许的.

比较SQL中以逗号分隔的字符串

SQL递归.硬币兑换问题.-try 使用递归解决硬币找零问题

如何将不同层次的产品组和规格组合到最深一层?

对现有记录进行分组

group by 并根据同表中其他列的某些条件获取 group by 中的某一列值

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

PostgreSQL如何将Unix纪元时间戳转换为日期时间并进行拼接

检索具有相同位置的最小和最大store 数量

Athena:从字符串birth_dt列计算年龄

SQL:获取连接表的第一个项目