我需要计算存储在字符串中的数学表达式的结果(例如:'A*(B+C)+(D*E)+F+G*(H+I)'
)。 该字符串可以包含任何数学运算符。以数学字符串计算NULL值而不用0替换它们PL/SQL
我的程序(一个PL/SQL程序)的第一步是与他们的价值观来取代变量(可以是NULL
)
但是,因为我需要我不能用零替换NULL
值区分总结果是NULL还是0
。
示例#1:
我期望有NULL作为结果,而不是0。
NULL*(B+C)+(NULL*10)+NULL+5*(NULL+NULL)
例#3:
我期望有0作为结果
NULL*(B+C)+(NULL*10)+0+5*(NULL+NULL)
示例2:
我希望有99作为结果
NULL*(B+C)+(NULL*10)+99+5*(NULL+NULL)
有没有办法动态地做到这一点?数学表达式可以是任何其他类型('A*B+C*D+E*G'
或'A*(B+C)+D*(E+F)'
或简单的A*B
或A+B+C
)。
如果没有括号,数学运算符的优先级必须像在标准计算中一样受到尊重。
替换所有值并从NULL值中清除表达式后,我使用execute immediate来计算最终结果。
感谢您的帮助!
您的需求呢没有道理。 NULL + NULL结果为NULL,但0 + NULL结果为0,但10 * NULL结果为NULL?用所有可能的操作符的NULL和非NULL值处理的完整定义更新你的问题。 – nop77svk
如果我的意见里面有一个NULL值,几乎每次结果都必须为NULL,除了所有的NULL都在方括号中,如(...)* 0 - > 0或(...)^ 0 - > 1. Fe在你的例子中#3:如果第一个NULL代表,我不知道,但可以是5百万,那么结果是0 + 5 000 000 *(A + B)(... + 10倍的任何和5倍的其他任何) - >隐含你用0代替所有NULL – am2
也许你可以做到以下几点:用随机值替换所有NULL两次并比较结果。如果两个结果都是相同的,你可以希望,NULL不起任何作用,但是当然你可以找到其中的一种组合,它给了你一个假的朋友。 – am2