例如,假设我们有一个表格,其中包含一个公式的 id 和一个公式本身。第二个表将具有值的 id 和值本身,它们将用于公式。
所以,有一个表格,它连接公式和值,就像一个公式的模板。例如,公式#1 的结果要根据#5、#16 和#228 的值计算。
问题是:每个公式使用不同的值和不同的数量和不同的方式,但相同的值可以用于不同的公式。例如,公式#1 计算为#228 - #16 * #5,而公式#2 计算为#16 * #228 + #356。
这就引出了一个问题,有没有办法根据选择语句和预定义的公式制作计算列?公式将手工写入数据库中,而不是生成,因此公式可以基于值IDS。
我还没有为我的项目选择数据库引擎,因为我很好奇是否有任何引擎完全支持这种东西?
我对数据库领域有一些了解,但我缺乏专业知识,所以想请教该领域更有经验的程序员。
答案 0 :(得分:1)
您将如何找到实际公式和输入参数并不完全清楚。但是您可以编写一个 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 个参数,否则会抛出错误。