代码之家  ›  专栏  ›  技术社区  ›  Richard Herron

在where字段中使用用户指定变量的rsqlite查询[重复]

  •  6
  • Richard Herron  · 技术社区  · 14 年前

    这个问题已经有了答案:

    我用的是 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 回复  |  直到 8 年前
        1
  •  9
  •   Dirk is no longer here    14 年前

    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="")
      }
    

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

        2
  •  3
  •   JD Long    14 年前

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

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

    这使得在数据库查询环境中进行测试时更容易剪切和粘贴SQL位。处理一个短查询没有什么大不了的,但是使用一个较长的SQL字符串可能会很麻烦。