来自jsonb的Postgresql(Aurora)Sum给出奇怪的错误

时间:2018-06-12 13:49:13

标签: postgresql casting jsonb amazon-rds-aurora

我试图对Aurora / Postgres数据库中的表中的jsonb类型列求值,但它似乎无法正常工作。

select (payload->>'loanAmount')::int from rfqs limit 1;

结果为10000 (int4)

select sum((payload->>'loanAmount')::int) from rfqs limit 1;

结果为:ERROR: invalid input syntax for integer: "2000.5"

这似乎与 - >>的方式有关。运算符将json转换为字符串,但是该字符串的某些内容是错误的,这会阻止它正确地对int进行类型转换。

作为测试,我做了select SUM(('10000'::int));,工作正常并按预期返回10000.

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这将使您了解(您将看到“:: int”的问题是什么)

select sum(payload->>'loanAmount') from rfqs

与:

相同
select sum(payload->>'loanAmount') from rfqs limit 1

(没有组的聚合只能在行上返回,所以“限制1”有点多余)

尝试

SELECT sum(to_number((payload->>'loanAmount'),'999999999D9999')) from rfqs

请参阅http://www.sqlfiddle.com/#!17/9c30a/8

答案 1 :(得分:0)

您的某些“ loanAmount”属性没有整数值。不过,第一条记录确实如此。

要查找违规记录:

SELECT payload FROM rfqs WHERE (payload->>'loanAmount') <> trunc(payload->>'loanAmount')