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)