将算术公式从字符串转换为值

Posted

技术标签:

【中文标题】将算术公式从字符串转换为值【英文标题】: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 函数 我只是想知道有没有可行的办法,在这里休息,那里会处理。 【参考方案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

【讨论】:

以上是关于将算术公式从字符串转换为值的主要内容,如果未能解决你的问题,请参考以下文章

从 NSFetchRequest 将字典数组转换为值数组

中缀表达式转换为后缀表达式(1042)

二进制图片如何转化为值

excel VBA 当有公式的单元格录入内容后,自动将内容粘贴为数值

算术表达式(中缀表达式)转换为后缀表达式

数组模拟实现一个50个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。