gpt4 book ai didi

java - 从查询中获取表名

转载 作者:行者123 更新时间:2023-11-30 07:24:38 25 4
gpt4 key购买 nike

我的问题对你们中的许多人来说应该很简单Supouse 我有以下 SQL,我想使用正则表达式获取表名:

SELECT name, age FROM table1

使用这个表达式我可以得到那个 ok

Pattern p = Pattern.compile(".*FROM\\s+(.*?)($|\\s+[WHERE,JOIN,START\\s+WITH,ORDER\\s+BY,GROUP\\s+BY])", Pattern.CASE_INSENSITIVE);
Matcher result = p.matcher(pSql);
if (result.find()) {
lRetorno = result.group(1);
}

但是,如果表名包含模式名 (xyz.table1),我的表达式会带来一切。我的问题是……我需要对此查询进行哪些修改才能只返回没有架构/所有者的表名?

任何帮助将不胜感激问候

拉斐尔·莫伊塔

最佳答案

也许这样试试

String data1="SELECT name, age FROM table1 whatever";
String data2="SELECT name, age FROM schema.table1 whatever";

Pattern p=Pattern.compile("from\\s+(?:\\w+\\.)*(\\w+)($|\\s+[WHERE,JOIN,START\\s+WITH,ORDER\\s+BY,GROUP\\s+BY])",Pattern.CASE_INSENSITIVE);

//test
Matcher m=p.matcher(data1);
while(m.find())
System.out.println(m.group(1));
m=p.matcher(data2);
while(m.find())
System.out.println(m.group(1));

输出:

table1 
table1

编辑

我刚刚意识到 ($|\\s+[WHERE,JOIN,START\\s+WITH,ORDER\\s+BY,GROUP\\s+BY]) 部分没有它不能正常工作,因为在我的输入中,我在表名后放置了“whatever”,但它还是被发现了。

它不像你那样工作,因为你使用的是 [WHERE,JOIN,START\\s+WITH,ORDER\\s+BY,GROUP\\s+BY] 而不是 (WHERE|JOIN|START\\s+WITH|ORDER\\s+BY|GROUP\\s+BY)。例如 [abc] 等于 (a|b|c) 所以它表示正则表达式引擎接受该集合中的任何字符,而不是单词 abc。将您的模式改进为类似

Pattern p=Pattern.compile("from\\s+(?:\\w+\\.)*(\\w+)(\\s*$|\\s+(WHERE|JOIN|START\\s+WITH|ORDER\\s+BY|GROUP\\s+BY))",Pattern.CASE_INSENSITIVE);

关于java - 从查询中获取表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com