我有一个用例,我想知道在SQL string.For实例中选择了哪些列,如果SQL是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,在解析了上面的字符串之后,我只希望输出为:name, intelligence。
首先,方解石有可能实现吗?
任何其他选项也是受欢迎的。
PS:在实际运行数据库查询之前,我想知道这一点。
发布于 2017-06-13 23:58:02
用方解石可以做到这一点。首先,您需要创建一个SqlParser实例并解析查询:
SqlParser parser = SqlParser.create(query)
SqlNode parsed = parser.parseQuery()在此基础上,您可能获得了最成功的SqlVisitor接口实现。您需要首先找到一个SqlSelect实例,然后通过在getSelectList的每个元素上调用a来访问所选的每个表达式。
从那时起,您如何继续将取决于您想要支持的表达式的复杂性。但是,递归访问所有SqlCall节点及其操作数,然后收集您看到的任何SqlIdentifier值可能就足够了。
发布于 2018-12-16 16:26:29
它可以像下面这样简单:
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());
}https://stackoverflow.com/questions/44508240
复制相似问题