Sql server 在SQL server中创建公式

Sql server 在SQL server中创建公式,sql-server,tsql,Sql Server,Tsql,也许你们中的一些人可以帮助我用sql创建公式。我需要对所有给定公式的表达式结果进行计算。公式的符号很简单:P(X)表示表达式在括号中附加整数X。M(Y)表示表达式减去括号中的整数Y。“+”符号组合了公式的元素。 例子。给定公式:P(10)+M(5)+M(3)+P(1)。它转换为10-5-3+1=3 结果应该如下所示: 这些简单的公式可以在Microsoft SQL Server中完成 使用和+作为分隔符,将公式拆分为不同的部分 用于应用负数符号:P(X)-->X和M(X)-->-X 用于将字符串

也许你们中的一些人可以帮助我用sql创建公式。我需要对所有给定公式的表达式结果进行计算。公式的符号很简单:P(X)表示表达式在括号中附加整数X。M(Y)表示表达式减去括号中的整数Y。“+”符号组合了公式的元素。 例子。给定公式:
P(10)+M(5)+M(3)+P(1)
。它转换为
10-5-3+1=3

结果应该如下所示:


这些简单的公式可以在Microsoft SQL Server中完成

  • 使用和
    +
    作为分隔符,将公式拆分为不同的部分
  • 用于应用负数符号:
    P(X)-->X
    M(X)-->-X
  • 用于将字符串部分转换为数字
  • 使用聚合和
    group by
    子句将所有内容相加
  • 样本数据

    create table input
    (
      formula nvarchar(50)
    );
    
    insert into input (formula) values
    ('P(10)+M(5)+M(3)+P(1)'),
    ('P(7)+M(3)+M(4)');
    
    解决方案

    select i.formula,
           sum(convert(int, replace(replace(replace(s.value,'P(', ''),'M(','-'),')',''))) as rez
    from input i
    cross apply string_split(i.formula, '+') s
    group by i.formula;
    
    结果

    formula               rez
    --------------------  ---
    P(10)+M(5)+M(3)+P(1)    3
    P(7)+M(3)+M(4)          0
    

    通过中间步骤查看所有操作。

    不确定要实现什么您想要SQL中的公式解析器吗?可以解释文本值
    'P(10)+M(5)+M(3)+P(1)
    并产生数值结果
    3
    ,编写一个存储函数。它的外观取决于您的数据库您使用的是哪种DBMS产品?“SQL”只是所有关系数据库使用的查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加。因此,您创建了一个用于存储常量的过于复杂的语法。为什么?为什么不只存储一次计算结果,并且在需要该值时不必进行计算呢?旁白:虽然不能保证结果的顺序(“输出行可以是任意顺序。顺序不能保证与输入字符串中的子字符串的顺序匹配。”)这不会影响此解决方案,因为输入中唯一的运算符是加法(
    +
    ),并且使用了相应的聚合