如何解决基于另一个表中的公式的列计算
例如,假设我们有一个表格,其中包含一个公式的 id 和一个公式本身。第二个表将具有值的 id 和值本身,它们将用于公式。
所以,有一个表格,它连接公式和值,就像一个公式的模板。例如,公式#1 的结果要根据#5、#16 和#228 的值计算。
问题是:每个公式使用不同的值和不同的数量和不同的方式,但相同的值可以用于不同的公式。例如,公式#1 计算为#228 - #16 * #5,而公式#2 计算为#16 * #228 + #356。
这就引出了一个问题,有没有办法根据选择语句和预定义的公式制作计算列?公式将手工写入数据库中,而不是生成,因此公式可以基于值IDS。
我还没有为我的项目选择数据库引擎,因为我很好奇是否有任何引擎完全支持这种东西?
我对数据库领域有一些了解,但我缺乏专业知识,所以想请教该领域更有经验的程序员。
解决方法
您将如何找到实际公式和输入参数并不完全清楚。但是您可以编写一个 PL/pgSQL 函数,将给定的输入字符串计算为 SQL 表达式:
create function eval(p_formula text,variadic parameters numeric[])
returns numeric
as
$$
declare
l_result numeric;
l_sql text;
begin
for idx in 1..cardinality(parameters) loop
p_formula := replace(p_formula,concat('$',idx),parameters[idx]::text);
end loop;
execute 'select '||p_formula
into l_result;
return l_result;
end;
$$
language plpgsql;
然后 select eval('$1 * $2 + $3',3,4,5)
返回 17
然而,上面的函数对于没有传递的参数并不宽容。使用公式 $3 + $6 - $1
必须至少传递 6 个参数,否则会抛出错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。