比如
with t1 as (select * from a1), t2 as(select * from a2)
select * from t1 left join t2 on t1.t2_id=t2.id
我需要提取到 [ select * from t1 left join t2 on t1.t2_id=t2.id ] 这个部分
我尝试过使用左右括号计数的方式,但失败了,因为这些 sql 语句相当随机,其中有备注或者语句内容本身有半边括号的情况
还有什么其他办法可以处理吗?
1
lookStupiToForce 2023-03-14 17:21:17 +08:00
你有没有意识到,你在实现一个简易的解析器( parser )
既然叫的出名字,还是这么基础的名字,那么肯定有人实现这种包了 比如我们来看看 python 里的 sqlparse zhuanlan[.]zhihu[.]com/p/279297051 |
2
hooopo 2023-03-14 21:02:43 +08:00
```
input: with t1 as (select * from a1), t2 as(select * from a2) select * from t1 left join t2 on t1.t2_id=t2.id output the main part of select query, without cte, I want you only give sql, no other normal text ``` 给 chatgpt |
3
greatbody 2023-03-14 21:28:53 +08:00
可以考虑使用 antlr4 进行 SQL 的语法解析,然后直接得到内容。这样就从根本上保证了匹配的准确性。
|