我是R和reg-ex的新手但最近决定接受它 我试图做一些我确定应该非常简单的事情
我有两个使用两种方法随机创建的SQL语句。两者都设置不同
第一个语句使用别名作为表名 第二个语句使用表的全名
我有两个问题
我想在R中获取一个脚本,该脚本将删除所有别名,并使用基于From子句的完整表名替换它们,例如。
SELECT AL1.attr1,AL1.attr2
FROM Table_1 as AL1
将变成
SELECT Table_1.attr1,Table_1.attr2
FROM Table_1
作为我的小实验的第二部分,我希望能够使用正则表达式对字段进行分段,例如,仅选择 AL1.attr1,AL1.attr2 并将它们放在列中并且第二列将 Table_1作为AL1
我认为第二部分几乎将回答第一部分
非常感谢任何帮助
由于
答案 0 :(得分:2)
没有正则表达式:
require(stringr); require(R.oo)
processMySQLtxt = function(txt)
{
fromSplit = sapply(strsplit(txt,"FROM")[[1]],trim)
tableInfo = trim(strsplit(fromSplit[2],"as")[[1]])
tableName = tableInfo[1]
aliasTable = tableInfo[2]
originallySelectedNames = strsplit(fromSplit[1],"SELECT ")[[1]][2]
selectInfo = lapply(strsplit(originallySelectedNames,","),trim)[[1]]
newStatement = if(!is.na(aliasTable))
paste("SELECT ",paste(sapply(selectInfo, str_replace_all, pattern=aliasTable, replacement=tableName),collapse=","), " FROM ", tableName, sep="")
else
paste("SELECT ",paste(selectInfo,collapse=","), " FROM ", tableName, sep="")
return(data.frame("Originally"=originallySelectedNames, "OriginalTableAlias" = fromSplit[2], "newStatement" = newStatement))
}
txt= "SELECT AL1.attr1,AL1.attr2 FROM Table_1 as AL1"
processMySQLtxt(txt)
txt= "SELECT attr1,attr2 FROM Table_1"
processMySQLtxt(txt)
只需(s/l)apply
您的语句集合的函数。您可以使用rbindlist
或data.table
中的do.call("rbind",results)
将所有内容整合在一起。