【发布时间】:2017-11-17 23:52:39
【问题描述】:
我有一个由
定义的函数CREATE OR REPLACE FUNCTION public.div(dividend INTEGER, divisor INTEGER)
RETURNS INTEGER
LANGUAGE 'sql'
IMMUTABLE
LEAKPROOF
STRICT
SECURITY DEFINER
PARALLEL SAFE
AS $BODY$
SELECT ($1 + $2/2) / $2;
$BODY$;
它应该计算一个商业四舍五入的结果。大多数时候,它可以完成工作。我不知道为什么,但是select div(5, 3) 给了我正确的答案,而当一个参数由聚合计算时却没有,例如select div(sum(val), 3) from (select 1 as val UNION SELECT 4) list 足以触发它。
如何修复div?我不想强制转换每个输入。
顺便说一句,使用SELECT (cast($1 as integer) + cast($2 as integer)/2) / cast($2 as integer); 作为div 的定义没有帮助。
【问题讨论】:
标签: sql postgresql user-defined-functions postgresql-9.4