Java Apache Calcite在SQL字符串中查找选定列
我有一个用例,我想知道在SQL字符串中选择的列。例如,如果SQL是这样的:Java Apache Calcite在SQL字符串中查找选定列,java,apache-calcite,sql-parser,Java,Apache Calcite,Sql Parser,我有一个用例,我想知道在SQL字符串中选择的列。例如,如果SQL是这样的: 从bla中选择姓名、年龄*5作为智能,其中bla=bla 然后,在解析上述字符串之后,我只希望输出为:name,intelligence 首先,可能通过方解石吗? 任何其他选择也是受欢迎的 PS:在实际运行数据库查询之前,我想知道这一点。对于方解石,这是绝对可行的。首先,您需要创建SqlParser的实例并解析查询: SqlParser parser = SqlParser.create(query) SqlNode p
从bla中选择姓名、年龄*5作为智能,其中bla=bla
然后,在解析上述字符串之后,我只希望输出为:
name,intelligence
首先,可能通过方解石吗?
任何其他选择也是受欢迎的
PS:在实际运行数据库查询之前,我想知道这一点。对于方解石,这是绝对可行的。首先,您需要创建
SqlParser
的实例并解析查询:
SqlParser parser = SqlParser.create(query)
SqlNode parsed = parser.parseQuery()
从那时起,您可能会获得实现该接口的最大成功。您需要首先找到一个SqlSelect
实例,然后通过对的每个元素调用visit来访问所选的每个表达式
从这里开始,如何继续将取决于要支持的表达式的复杂性。但是,递归访问所有
SqlCall
节点及其操作数,然后收集您看到的任何SqlIdentifier
值可能就足够了。可以简单到:
SqlParser parser = SqlParser.create(yourQuery);
SqlSelect selectNode = (SqlSelect) parser.parseQuery();
SqlNodeList list = selectNode.getList();
for (int i = 0; i < list.size(); i++) {
System.out.println("Column " + (i + 1) + ": " + list.get(i).toString());
}
SqlParser=SqlParser.create(您的查询);
SqlSelect selectNode=(SqlSelect)parser.parseQuery();
SqlNodeList list=selectNode.getList();
对于(int i=0;i
您可以只解析sql表达式的一部分吗?e、 g.解析总和(金额)/计数(id)
。我可以生成伪sql,但只要能够解析由sql函数生成的有效sql表达式就好了。对于这种情况,您应该能够使用SqlParser
的parseExpression
方法。