首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsqlParser如何重写表达式

JsqlParser如何重写表达式
EN

Stack Overflow用户
提问于 2022-01-04 13:15:55
回答 1查看 118关注 0票数 0

我有一个sql,其中包含:

代码语言:javascript
复制
a > 1 and b < 1 and c = 3

在这种情况下,我想要删除a>1,我如何重写它

代码语言:javascript
复制
1 = 1 and b < 1 and c =3

我尝试过ExpressionVisitor,但无法重写表达式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 14:42:40

您只需使用以下内容来替换SQL的where部分:

代码语言:javascript
复制
((PlainSelect)selectBody).setWhere(CCJSqlParserUtil.parseCondExpression("mycol = 10"));

但是,如果您想使用where表达式本身,并想在其中找到表达式a> 1,那么您必须使用以下内容

代码语言:javascript
复制
Select stmt = (Select) CCJSqlParserUtil.parse("select * from a where a > 1 and b < 1 and c = 3");
System.out.println("before " + stmt.toString());

((PlainSelect) stmt.getSelectBody()).getWhere().accept(new ExpressionVisitorAdapter() {
    @Override
    public void visitBinaryExpression(BinaryExpression expr) {
        if ("a > 1".equals(expr.getLeftExpression().toString())) {
            try {
                expr.setLeftExpression(CCJSqlParserUtil.parseCondExpression("1=1"));
            } catch (JSQLParserException ex) {
                Logger.getLogger(SimpleSqlParser39ReplaceExpressionInWhere.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        super.visitBinaryExpression(expr);
    }
});

System.out.println("after " + stmt.toString());

这是,而不是,这是一个完整的解决方案,因为您还必须检查正确的表达式。由于您确实无法修改二进制表达式a>1本身,所以您必须在那里查找并替换它。所以这就是主要的想法。

顺便说一下,这是这个小片段的输出:

代码语言:javascript
复制
before SELECT * FROM a WHERE a > 1 AND b < 1 AND c = 3
after SELECT * FROM a WHERE 1 = 1 AND b < 1 AND c = 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70579418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档