bodmas表达式的Oracle实现,基于给定的表达式拆分为2个变量。
让我们说,我有下面的表达式
((规则1和规则2和规则3)和(不(规则4))
我有一个包含以下记录的表
Item_no item_type active_from active_to rule id 10001 SAR 01-Jan-2023 31-Jan-2023 rule1 10001 SAR 01-Feb-2023 28-Feb-2023 rule1 10001 SAR 01-Jan-2023 31-Dec-9999 rule2 10001 SAR 01-Feb-2023 28-Feb-2023 rule3 10001 SAR 01-Feb-2023年12月31日规则3 10001 SAR 2023年1月1日规则4
这里基于ruleid列,我需要实现bodmass类型评估。
I.e.in 上面的表达式,首先我需要首先评估所有括号中的'and'子句,并获得公共有效期(这里的'and'表示rule 1,rule 2,rule 3之间的所有active from和active to日期的交集),然后基于此输出,我需要使用not in clause(minus)Rule 4。
我尝试使用bodmass动态地基于ruleid列实现对上表中的active from和active to子句的求值。无论我得到什么表达式,我都需要基于bodmas类型评估来评估'active from'和'active to'。请注意,表达式可以是任何类型。(AND,OR,NOT)
我尝试的是:
在这种情况下,我需要用'AND'运算符传递rule 1和rule 2并获得结果,并将结果作为R1。现在我需要用'And'操作符将R1与Rule 3结合起来,得到R2的结果。一旦完成了所有的Rule 1、Rule 2和Rule 3,我需要计算R2,而不是Rule 4。
另一个表达式示例:((规则1和规则2)或(规则3和规则4))
在这种情况下,步骤1:rule 1和rule 2得到的结果与R1 Step2相同:规则3和规则4得到结果R2步骤3:R1或与R2一起得到最终结果。
如何在这个oracle中实现bodmas表达式求值。(首先按照2-2规则评估所有内括号,然后评估外括号)?
计划先创建表并存储内括号结果,然后再存储外括号以供执行,但如果我在www.example.com中有多个规则与同一运算符组合,则会卡住brackets.as我的函数一次只允许2个规则
1条答案
按热度按时间ve7v8dk21#
修改my answer to your previous question(你可以自己做),然后对于
rule1 and rule2 and rule3 and not rule4
,你可以用途:其中,对于样本数据:
rule4
行覆盖了所有rule1
和rule3
行。示例数据已更改,因此返回一行。*输出:
| 项目编号|项目类型|ACTIVE_FROM| ACTIVE_TO|
| - -----|- -----|- -----|- -----|
| 10001| SAR| 2019 -02- 13 00:00:01| 2019 -02-28 00:00:00|
fiddle
通过更改
MATCH_RECOGNIZE
部分的DEFINE
子句,您可以对前面问题的答案进行类似的更改,以获得您想要实现的其他逻辑的结果。