在WHERE字段中使用用户指定的变量进行RSQLite查询

时间:2010-08-10 13:53:52

标签: r rsqlite

我正在使用R in中的RSQLite库来管理对RAM来说太大的数据集。对于每个回归,我查询数据库以一次检索一个会计年度。现在我有财政年度的硬编码:

data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==2008")

我想让财政年度(2008年上面)让变更更容易(并且万无一失)。有没有办法可以将变量传递给SQL查询字符串?我很乐意使用:

fiscal.year <- 2008
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==fiscal.year")

2 个答案:

答案 0 :(得分:9)

SQLite只会看到为查询传递的字符串,所以你所做的就像是

  sqlcmd <- paste("SELECT * FROM annual WHERE fiscal=", fiscal.year, sep="")
  data.annual <- dbGetQuery(db, sqlcmd)

好消息是你可以通常的方式来解开循环。忘了你有ram限制的第二个,概念上你可以做

  years <- seq(2000,2010)
  data <- lapply(years, function(y) {
     dbGetQuery(db, paste("SELECT * FROM annual WHERE fiscal=", y, sep="")
  }

现在数据是包含所有年度数据集的列表。或者您可以保留数据,运行回归并仅存储摘要对象。

答案 1 :(得分:3)

Dirk的回答很明显。我尝试做的一件小事就是更改格式以便于测试。似乎我必须多次将SQL文本剪切并粘贴到SQL编辑器中。所以我的格式如下:

sqlcmd <- paste("
   SELECT * 
   FROM annual 
   WHERE fiscal=
 ", fiscal.year, sep="")
data.annual <- dbGetQuery(db, sqlcmd)

这样可以更轻松地将SQL位切入和粘贴到数据库查询环境中进行测试。对于简短的查询没什么大不了的,但是使用更长的SQL字符串会变得很麻烦。