基于另一个公式的列计算 Table
Column calculation based on formula from another Table
例如,假设我们有一个table,它包含一个公式的id和一个公式本身。第二个 table 将具有值的 id 和值本身,它们将在公式中使用。
所以,有一个table,它连接公式和值,就像公式的模板。例如,公式#1 的结果将由值#5、#16 和#228 计算得出。
问题是:每个公式使用不同的值和不同的值以及不同的方式,但可以在不同的公式中使用相同的值。例如,公式#1 计算为#228 - #16 * #5,而公式#2 计算为#16 * #228 + #356.
这就引出了一个问题,有没有一种方法可以根据 select 语句和预定义的公式制作计算列?公式会手工写入数据库,不会生成,所以一个公式可以根据值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(' * + ', 3, 4, 5)
returns17
但是上面的函数对于没有传递参数的问题并不宽容。使用公式 + -
你必须至少传递 6 个参数,否则会抛出错误。
例如,假设我们有一个table,它包含一个公式的id和一个公式本身。第二个 table 将具有值的 id 和值本身,它们将在公式中使用。
所以,有一个table,它连接公式和值,就像公式的模板。例如,公式#1 的结果将由值#5、#16 和#228 计算得出。
问题是:每个公式使用不同的值和不同的值以及不同的方式,但可以在不同的公式中使用相同的值。例如,公式#1 计算为#228 - #16 * #5,而公式#2 计算为#16 * #228 + #356.
这就引出了一个问题,有没有一种方法可以根据 select 语句和预定义的公式制作计算列?公式会手工写入数据库,不会生成,所以一个公式可以根据值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(' * + ', 3, 4, 5)
returns17
但是上面的函数对于没有传递参数的问题并不宽容。使用公式 + -
你必须至少传递 6 个参数,否则会抛出错误。