java 将任意选择SQL替换为计数SQL

xzlaal3s  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(211)

我需要像写一个方法(java)来转换任意SQL字符串

select xxx,xxx,xxx 
from xxx
where xxxxx

-- or

select *
from xxx
where xxxxx

转换为计数sql字符串,如:

select count(*) as total
from xxx
where xxxxx

我在考虑用count(*) as total替换selectfrom之间的任何内容,这种方法是否存在一些潜在的问题?我不需要处理每一种情况,但我想知道这种方法在哪些情况下可能会有问题,我是否可以忽略它们,或者您是否会用其他方法来做。
我无法使用此嵌套解决方案

select count(*)
from ( original query )

因为数据库分片限制。

wztqucjr

wztqucjr1#

我们可以尝试用正则表达式替换SELECT子句,假设查询的每一部分都在单独的行上,我们可以尝试:

String sql = "select xxx,xxx,xxx \nfrom xxx\nwhere xxxxx";
String output = sql.replaceAll("\\bselect.*", "select count(*) as total");
System.out.println(output);

这将打印:

select count(*) as total
from xxx
where xxxxx

正则表达式模式\bselect.*将匹配select关键字,直到该行的末尾(默认情况下,.*不会跨换行符匹配),然后我们用所需的选择计数替换。

相关问题