You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用REGEXP_SUBSTR提取FROM与指定关键字间的Oracle表名

修正后的正则表达式及解决方法

问题原因

你当前的正则会匹配SQL中第一个出现的FROM(比如示例里upper(c from xyz)中的FROM),导致提取的内容混入了函数内的无关文本。核心是要精准匹配最后一个FROM——也就是对应目标表名的那个FROM。

修正后的REGEXP_SUBSTR语句

REGEXP_SUBSTR(query_blob, '.*FROM\\s+(.*?)\\s+(WHERE|FETCH|ORDER|GROUP)', 1, 1, 'i', 1)

正则逻辑拆解

  • .*:贪婪匹配任意字符,直到定位到最后一个FROM,自动跳过所有出现在函数、子查询里的前置FROM
  • FROM\\s+:匹配FROM关键字,以及后面的一个或多个空白字符(兼容SQL里的空格、制表符等格式)
  • (.*?):非贪婪匹配表名内容,直到遇到后续的空白和指定关键字
  • \\s+(WHERE|FETCH|ORDER|GROUP):匹配表名后的空白,以及你指定的SQL结尾关键字
  • 'i':开启大小写不敏感模式,兼容from/From等不同写法
  • 最后一个参数1:指定提取第一个捕获组的内容(即目标表名)

测试验证

针对你的示例SQL:

"select a,b ,upper(c from xyz), d from t1 where xyx;"

执行修正后的语句会正确返回t1。

内容的提问来源于stack exchange,提问作者Sneha S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:31:01