我如何解析布尔逻辑?

Joe*_*ips 5 parsing boolean-logic sqlclr

我需要编写一个布尔逻辑解析器,它将布尔逻辑语言转换为SQL WHERE子句.

操作数的顺序始终是正确的顺序(右边的值).

这是一个相对简单的例子.可能有嵌套括号和NOT运算符等的使用.

(CACOUNT=01 OR CACOUNT=02 OR CACOUNT=03)
 AND Q4=1 AND NAME=TIMOTHY
Run Code Online (Sandbox Code Playgroud)

这是WHERE子句类似的内容.

WHERE (
     EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='01'
     )
  OR EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='02'
  )
  OR EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='03'
  )
)
AND EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='Q4' AND b.Value='1'
)
AND EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='NAME' AND b.Value='TIMOTHY'
)
Run Code Online (Sandbox Code Playgroud)

And*_*rey 2

好吧,WHERE 之后是布尔表达式,所以你需要通过简单的替换进行翻译,而不是解析。对于您的示例,您只需将引号放在末尾:NAME='TIMOTHY'