开发者社区> 问答> 正文

SQLBinaryOperator能否支持AND NOT逻辑操作?

目前看只支持这3种:

BooleanAnd("AND", 140), BooleanXor("XOR", 150), BooleanOr("OR", 160),

因项目需求,通过SQLBinaryOperator构建SQL时,需要构建出AND NOT,能否通过扩展支持BooleanNot("AND NOT", 140)呢? 如果可以,需要修改那些地方呢?

原提问者GitHub用户xgpxg

展开
收起
山海行 2023-07-05 18:04:58 69 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 SQL 语法中,AND NOT 是一种逻辑操作符,表示取两个条件的交集,但排除符合第二个条件的结果。例如,如果需要查询既满足条件 A,又不满足条件 B 的记录,就可以使用 AND NOT 操作符。在 SQL 中,可以使用以下语法来执行 AND NOT 操作:

    sql
    Copy
    SELECT * FROM table_name WHERE condition_A AND NOT condition_B;
    在 Java 中,JDBC API 提供了 SQLBinaryOperator 接口来表示 SQL 中的二元操作符。虽然 SQLBinaryOperator 支持大部分SQL中的二元操作符,包括 AND 和 OR,但是并不支持 AND NOT 操作符。

    2023-07-30 20:45:22
    赞同 展开评论 打赏
  • a AND b (NOT c)

    其中NOT是SQLUnaryOperator.NOT

    原回答者GitHub用户wenshao

    2023-07-06 10:42:42
    赞同 展开评论 打赏
  • SQLBinaryOperator类定义了用于构建SQL表达式的二元运算符。它目前支持的逻辑操作符有AND、OR和XOR,但不支持AND NOT操作符。

    要添加对AND NOT操作符的支持,您需要进行以下修改:

    1. 在SQLBinaryOperator类中添加一个新的枚举值BooleanNot,并设置对应的操作符字符串为"AND NOT",优先级为140。
    public enum SQLBinaryOperator {
        BooleanAnd("AND", 140),
        BooleanXor("XOR", 150),
        BooleanOr("OR", 160),
        BooleanNot("AND NOT", 140);
        
        private final String name;
        private final int priority;
    
        SQLBinaryOperator(String name, int priority) {
            this.name = name;
            this.priority = priority;
        }
    
        public String getName() {
            return name;
        }
    
        public int getPriority() {
            return priority;
        }
    }
    
    1. 根据您的需求,将BooleanNot操作符的优先级设置为与BooleanAnd相同的140。这样可以确保AND NOT操作符的优先级正确。

    2. 在使用到SQLBinaryOperator的地方,比如构建SQL表达式的代码中,将需要使用AND NOT操作符的地方替换为BooleanNot。

    经过以上修改,您应该能够使用SQLBinaryOperator来构建具有AND NOT逻辑操作的SQL表达式。请注意,这只是一种扩展SQLBinaryOperator类的方式,具体实现可能会因项目结构和需求而有所不同。

    2023-07-05 19:06:53
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载