我试图对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.
有什么想法吗?
答案 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
答案 1 :(得分:0)
您的某些“ loanAmount”属性没有整数值。不过,第一条记录确实如此。
要查找违规记录:
SELECT payload FROM rfqs WHERE (payload->>'loanAmount') <> trunc(payload->>'loanAmount')