我正在对SQL查询进行一些字符串解析,并且在识别和提取嵌套查询方面已经有了一些十字路口。在以下情况下:
select name, wins
from mlb_team
where wins > (select avg(wins) from mlb_team) and league = 'NL'
order by wins desc
我想提取(select avg(wins) from mlb_team)
。在嵌套查询的情况下出现了一个更全局的问题,该查询包含嵌套查询的父查询中关键字之后的关键字。即。
select columns
from table
where column_val > (select avg(column) from table where conditional order by column asc) and league = 'NL'
order by wins desc
嵌套查询包含order by子句和父项一样,因此单独搜索该关键字不会使此代码更具通用性。我希望能够放入任何查询并让它提取嵌套查询。
提示或建议会有所帮助。我目前正在使用大量的正则表达式来拉出子句并且单表查询处理正常(即我自己获得每个单独的子句)但是使用嵌套查询我正在碰壁。
谢谢你们!
答案 0 :(得分:0)
在您的情况下,您可以使用此RegEx:
\(select.+(desc|asc|\)|$)
使用递归函数,您可以解析更多子查询。
但我强烈建议不要使用正则表达式解析SQL,并且@RC建议使用已经构建的SQL解析器。您将打开一个永无止境的故事,您将始终在解析器上进行开发。 (取决于DBMS或ANSI SQL或或者,不要这样做)