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

求助:在R Studio中从SQL语句列定位特定词并提取后续词汇

在R Studio中提取SQL语句里特定词汇后的内容

嘿,我来帮你搞定这个问题!在R里处理包含SQL语句的数据框,要定位特定词汇并提取紧随其后的内容,正则表达式搭配dplyr和stringr包就能轻松实现。下面我结合你的示例数据一步步演示:

第一步:准备示例数据

先把你给出的示例数据整理成可运行的R数据框:

library(dplyr)
library(stringr)

# 构建你的示例数据框
sql_df <- tibble(
  UserID = c("N781", "N283"),
  SQL_Statement = c(
    "SELECT A, B FROM Table.1 p JOIN Table.2 pv ON p.ProdID.1=pv.ProdID.1 JOIN Table.3 v ON pv.BusID.1 = v.BusID WHERE SubID = 1 ORDER BY v.Name;",
    "SELECT D, E FROM Table.11 p JOIN Table.4 pv ON p.ProdID=pv.ProdID WHERE SubID = 5 ORDER BY p.Date;"
  )
)

场景1:提取JOIN紧随其后的所有表名

如果你的需求是找出每个SQL语句中所有JOIN关联的表,可以用str_extract_all结合正则表达式实现:

sql_df <- sql_df %>%
  mutate(
    # 提取所有JOIN后面的表名(匹配类似Table.1的格式)
    Joined_Tables = str_extract_all(SQL_Statement, "(?<=JOIN\\s+)\\w+\\.\\w+")
  )

# 查看处理后的结果
print(sql_df)

正则说明:

  • (?<=JOIN\\s+):正向预查,匹配JOIN加上一个或多个空格之后的位置(避免漏过空格多的情况)
  • \\w+\\.\\w+:匹配类似Table.1这种由字母数字+点+字母数字组成的表名

场景2:提取SubID =后面的数值

如果要提取WHERE子句中SubID对应的值,用str_extract提取单个匹配结果即可:

sql_df <- sql_df %>%
  mutate(
    # 提取SubID = 后面的数字
    SubID_Value = str_extract(SQL_Statement, "(?<=SubID\\s=\\s)\\d+")
  )

# 查看结果
print(sql_df)

正则说明:

  • (?<=SubID\\s=\\s):匹配SubID = (左右带空格)之后的位置
  • \\d+:提取连续的数字

通用自定义提取方法

如果需要提取其他特定词汇后的内容,只需要修改正则的预查部分即可:

  • 比如提取FROM后面的第一个表:(?<=FROM\\s+)\\w+\\.\\w+
  • 如果SQL里的表名带引号(比如"Table.1"),可以调整正则为(?<=JOIN\\s+)"?\\w+\\.\\w+"?,匹配带或不带引号的表名

内容的提问来源于stack exchange,提问作者Jim.W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:41:44