求助:在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
相关产品推荐
相关产品推荐

