将算术公式从字符串转换为值
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
【讨论】:
以上是关于将算术公式从字符串转换为值的主要内容,如果未能解决你的问题,请参考以下文章