You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL JSON字段数值运算报错:invalid input syntax for integer

解决PostgreSQL中JSON数值提取并加1的语法错误

嘿,我来帮你搞定这个问题~你遇到的错误核心是类型转换的顺序搞错了,还有不必要的嵌套查询语法,咱们一步步理清楚:

错误原因分析

你原来的代码里,::integer被错误地加在了JSON路径'{total_votes}'后面,这相当于试图把字符串"{total_votes}"转换成整数——这显然不是合法的整数格式,PostgreSQL自然会报“invalid input syntax for integer”的错误。另外,嵌套的select完全没必要,反而把语法搞复杂了。

正确的写法

我们需要先从JSON对象里提取出total_votes的数值,转换成整数后再加1,这里有两种常用的方式:

方式一:用#>>直接提取文本再转整数

#>>操作符会直接把JSON字段的值提取成文本类型,之后转成整数就很顺畅:

declare 
    total_votes integer;
    poll_result json; -- 假设你已经正确获取了这个变量的值
begin
    select result into poll_result from polls where id = 1;
    total_votes = (poll_result #>> '{total_votes}')::integer + 1;
end;

方式二:用#>提取JSON值再转类型

如果你习惯用#>(返回JSON类型的数值),需要先把JSON值转成数值类型,再转整数:

declare 
    total_votes integer;
    poll_result json;
begin
    select result into poll_result from polls where id = 1;
    total_votes = (poll_result #> '{total_votes}')::numeric::integer + 1;
end;

额外小提示

如果你的PostgreSQL版本是12及以上,还可以用更直观的JSON路径表达式来提取值:

total_votes = jsonb_path_query_first(poll_result::jsonb, '$.total_votes')::integer + 1;

这种写法可读性更强,适合复杂的JSON结构。

内容的提问来源于stack exchange,提问作者Code Guru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:38:09