2

我有一个用例,我想知道在 SQL 字符串中选择的列。例如,如果 SQL 是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,在解析上述字符串后,我只想输出为:name, intelligence
首先,可以通过方解石吗?
也欢迎任何其他选择。

PS:在实际对数据库运行查询之前,我想知道这一点。

4

2 回答 2

7

这对于方解石绝对是可行的。您首先要创建一个实例SqlParser并解析查询:

SqlParser parser = SqlParser.create(query)
SqlNode parsed = parser.parseQuery()

从那里开始,您可能会最成功地实现该SqlVisitor接口。您需要先找到一个SqlSelect实例,然后通过对getSelectList.

从那里开始,您如何进行将取决于您想要支持的表达式的复杂性。但是,递归访问所有SqlCall节点及其操作数然后收集SqlIdentifier您看到的任何值可能就足够了。

于 2017-06-13T15:58:01.933 回答
0

它可以很简单:

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());
}
于 2018-12-16T08:26:29.167 回答