使用R分段SQL语句

时间:2014-04-18 17:50:01

标签: sql regex r

我是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

我认为第二部分几乎将回答第一部分

非常感谢任何帮助

由于

1 个答案:

答案 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您的语句集合的函数。您可以使用rbindlistdata.table中的do.call("rbind",results)将所有内容整合在一起。