我有一个用例,我想知道在 SQL 字符串中选择的列。例如,如果 SQL 是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,在解析上述字符串后,我只想输出为:name, intelligence
。
首先,可以通过方解石吗?
也欢迎任何其他选择。
PS:在实际对数据库运行查询之前,我想知道这一点。
我有一个用例,我想知道在 SQL 字符串中选择的列。例如,如果 SQL 是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,在解析上述字符串后,我只想输出为:name, intelligence
。
首先,可以通过方解石吗?
也欢迎任何其他选择。
PS:在实际对数据库运行查询之前,我想知道这一点。
这对于方解石绝对是可行的。您首先要创建一个实例SqlParser
并解析查询:
SqlParser parser = SqlParser.create(query)
SqlNode parsed = parser.parseQuery()
从那里开始,您可能会最成功地实现该SqlVisitor
接口。您需要先找到一个SqlSelect
实例,然后通过对getSelectList
.
从那里开始,您如何进行将取决于您想要支持的表达式的复杂性。但是,递归访问所有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());
}