在 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 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章