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

Posted

技术标签:

【中文标题】在 WHERE 字段中使用用户指定变量的 RSQLite 查询 [重复]【英文标题】:RSQLite query with user specified variable in the WHERE field [duplicate] 【发布时间】:2010-08-10 13:53:51 【问题描述】:

我在 R 中使用 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")

【问题讨论】:

类似的:***.com/questions/3416973/dynamic-string-in-r 【参考方案1】:

SQLite 只会看到为查询传递下来的字符串,所以你所做的是类似于

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

好处是您可以使用这种通常的方式来展开循环。暂时忘记你有内存限制,从概念上讲你可以这样做

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

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

【讨论】:

哇!我需要将使用paste 创建字符串并将其作为参数传递的想法内化!谢谢!【参考方案2】:

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

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

这只是为了更容易地剪切和粘贴 SQL 位,以便在您的数据库查询环境中进行测试。简短的查询没什么大不了的,但是较长的 SQL 字符串会变得很麻烦。

【讨论】:

你的意思是你把它从一个 emacs 缓冲区粘贴到另一个 emacs 缓冲区中? ;-) 哎哟..哎哟..别再戳我了。好痛。哎哟。 我的意思是“不要再戳我的眼睛,因为我明显没有充分利用 emacs”

以上是关于在 WHERE 字段中使用用户指定变量的 RSQLite 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

WHERE子句不使用空值

sql语句where条件查询

如何在 Ruby 中使用 Where 子句 (PostgreSQL) 中的变量编写查询

5.where_in_在指定的字段里面

需要 Where 子句中的属性 (Redshift)

C# SQL条件查询语句where中使用变量的用法