PostgreSQL sum类型转换为bigint
我正在对整型列执行sum(),我希望将结果类型转换为bigint,以避免出现错误。然而,当我尝试使用sum(myvalue)::bigint时,它仍然会给我一个超出范围的错误PostgreSQL sum类型转换为bigint,sql,postgresql,types,aggregate-functions,bigint,Sql,Postgresql,Types,Aggregate Functions,Bigint,我正在对整型列执行sum(),我希望将结果类型转换为bigint,以避免出现错误。然而,当我尝试使用sum(myvalue)::bigint时,它仍然会给我一个超出范围的错误 我可以对查询做些什么来让它工作吗?或者我必须将列类型更改为bigint吗?结果明显大于可以容纳的值: -9223372036854775808至+9223372036854775807 Postgres在这种情况下返回。你不应该做任何事情,它应该在没有显式强制转换的情况下工作 如果没有,您可以将基类型强制转换为bigint
我可以对查询做些什么来让它工作吗?或者我必须将列类型更改为bigint吗?结果明显大于可以容纳的值: -9223372036854775808至+9223372036854775807 Postgres在这种情况下返回。你不应该做任何事情,它应该在没有显式强制转换的情况下工作 如果没有,您可以将基类型强制转换为
bigint
,从而在任何情况下强制结果为numeric
SELECT sum(myvalue::int8) ...
结果显然比我们所能承受的更大: -9223372036854775808至+9223372036854775807 Postgres在这种情况下返回。你不应该做任何事情,它应该在没有显式强制转换的情况下工作 如果没有,您可以将基类型强制转换为
bigint
,从而在任何情况下强制结果为numeric
SELECT sum(myvalue::int8) ...
我用下面的语句解决了我的问题
SUM(CAST(gross_amount AS Integer))
这是以SUm bigint的形式给出列的结果
注意:我的“总金额”列是双精度类型。我使用以下语句解决了我的问题
SUM(CAST(gross_amount AS Integer))
这是以SUm bigint的形式给出列的结果
注意:我的“总金额”列是双精度类型。在执行操作之前,您需要强制转换它:
SUM(myvalue::bigint)
您需要在执行操作之前强制转换它:
SUM(myvalue::bigint)
Try sum(myvalue::bigint)
sum(myvalue)::bigint
的意思是“在myvalue
上计算聚合函数sum
,然后将结果强制转换为bigint
”-因此,在强制转换发生时,sum()
已经选择了它的结果类型,sum为smallint或int参数返回bigint,为bigint参数返回numeric,为浮点参数返回双精度,否则与参数数据类型相同
,因此可能不需要内部强制转换。实际上,整数和溢出bigint所需的行数可能首先在其他方面失败(如磁盘空间、IO带宽等)。虽然我看到过一些边缘情况,它实际上会溢出。尝试sum(myvalue::bigint)sum(myvalue)::bigint
的意思是“计算聚合函数sum
overmyvalue
,然后将结果转换为bigint
”——因此,在转换发生时,sum()
已经选择了它的结果类型。在文档中,sum为smallint或int参数返回bigint,为bigint参数返回numeric,为浮点参数返回双精度,否则与参数数据类型相同
,因此可能不需要内部强制转换。实际上,整数和溢出bigint所需的行数可能首先在其他方面失败(如磁盘空间、IO带宽等)。虽然我见过一些边缘情况,它实际上会溢出。猜得好,但我应该指定这些值在bigint范围内。@AaronKreider:一般来说,您应该提供表定义(使用\d mytable
从psql获得的)并更具体一些。“值”仍然是不明确的…很好的猜测,但我应该指定值在bigint范围内。@AaronKreider:一般来说,您应该提供表定义(使用\d mytable
从psql获得的内容)并更具体一些。“价值观”仍然模棱两可。。。