【问题标题】:Converting arithmetic formula from string to a values将算术公式从字符串转换为值
【发布时间】:2016-01-15 12:42:28
【问题描述】:

我有一个表格,其中所有条目都采用算术公式的形式(即'0.51 + 2.50 + 3.50')。

在此表中,所有列都是 varchar 类型。该表有很多这样的列。

我想在函数中计算公式并将其用于其他计算,但我的问题是“EXEC”不能在辅助函数中使用,我不能在存储过程中使用函数。

那么,关于如何实现这一点有什么建议吗?

【问题讨论】:

  • 只有`+`?或整个光谱 (+,-,*,/) ...
  • 它可以是任何东西 (+,-,*,/)
  • 您还希望运算符优先级正常工作(2+2*2 = 6 而不是 8)是吗?显示更多表达式,是否需要数学函数、括号、^ 表示幂、...
  • 编辑您的问题,显示更多示例,对于简单的情况,我可以用 T-SQL 编写代码,但我不会,因为那样你会写你必须处理等。可能最简单的方法是编写将评估您的数学表达式的 CLR 函数
  • 我只是想知道有没有可行的办法,在这里休息,那里会处理。

标签: stored-procedures sql-server-2012 user-defined-functions


【解决方案1】:

免责声明:我是项目的所有者Eval SQL.NET

您可以使用现有的 SQL CLR,而不是按照建议创建自己的 SQL CLR,它允许您在 T-SQL 中轻松编写 C# 语法。

-- SELECT 6.51
SELECT SQLNET::New('0.51 + 2.50 + 3.50').Eval()

您甚至可以将列用作公式和参数

-- Evaluate dynamically expression in T-SQL
DECLARE @tableFormula TABLE (
   Formula VARCHAR(255), X INT, Y INT, Z INT
)

INSERT  INTO @tableFormula VALUES ('x+y*z', 1, 2, 3 ), 
                                  ('(x+y)*z', 1, 2, 3 )
-- SELECT 7
-- SELECT 9
SELECT SQLNET::New(Formula)
              .Val('x', X)
              .Val('y', Y)
              .Val('z', Z).EvalInt()
FROM @tableFormula

文档:Dynamically evaluating arithmetic operation in T-SQL

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多