如何在SQL Server中动态计算包含公式的列并返回值

时间:2019-07-03 14:57:06

标签: sql sql-server math replace formula

我一直在寻找这个,但是我不知道如何询问这个特定信息。

让我们想象一下我的sql表中有类似的内容。

Columns:
width : 10
height: 15
Depth: 6

我有一个这样的公式列

formula: (W*2)+H+D+3

在这里,我将W替换为Width,将H替换为Height,将D替换为depth。 使用sql Replace,我能够做到这一点并将最终结果转换为

(10*2)+15+6+3

问题是结果是我需要在该列中进行计算。

我在SQL中直接尝试了

select 1 as width , 
2 as height , 
3 as depth , 
'H*2+W' as formula,
replace(Replace(REPLACE('H*2+W','W',1),'H',2),'D',3) as result

我需要能够直接在查询中执行此操作,并使用其特定值计算每一行结果。

我尝试在Select内执行Execs,但是没有运气。如果我的初始查询有1000行,它将运行1000个查询...

我怎样才能做到最好呢?

1 个答案:

答案 0 :(得分:-1)

您不能轻松地做自己想做的事。 SQL Server没有方便的解析机制来从字符串创建代码。您可以使用动态SQL和游标,但这很麻烦。

但是,您也许可以使用系数存储公式:


@FunctionTemplate(
        name = "testing_udf",
        scope = FunctionTemplate.FunctionScope.SIMPLE,
        nulls = FunctionTemplate.NullHandling.INTERNAL
)
public class TestingFunction implements DrillSimpleFunc {

     @Param
         NullableFloat8Holder numberA;
     @Param
         NullableFloat8Holder numberB;
     @Output

     Float8Holder out;

     public void setup() {
     }

     public void eval() {
         // Whatever
     }
}

那么您可以做:

formula         w_coeff    h_coeff    d_coeff    constant
(W*2)+H+D+3        2          1           1          3
'H*2+W'            1          2           0          0