Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Calcite在SQL字符串中查找选定列_Java_Apache Calcite_Sql Parser - Fatal编程技术网

Java Apache Calcite在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

我有一个用例,我想知道在SQL字符串中选择的列。例如,如果SQL是这样的:
从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
方法。