我使用R中的sql select statment从表中提取一些数据,
query <- "select * from MyTable where TimeCol='6/29/2012 21:05' ";
result <- fn$sqldf(query);
上面的代码给出了正确的结果,但是当时间值保存在变量中时,它不起作用
mytime <- "6/29/2012 21:05";
query <- "select * from MyTable where TimeCol = $mytime"; # OR
query <- "select * from MyTable where TimeCol = $[mytime]"; # OR
query <- "select * from MyTable where TimeCol = '$[mytime]' ";
result <- fn$sqldf(query);
以上三条线都不起作用
View(result)
它给出了错误:无效的'x'参数
答案 0 :(得分:1)
$[]
和$()
不是有效的语法,并且后续实例中缺少帖子中query
的第一个实例中的时间字符串周围的引号,因此版本正确将是:
library(sqldf)
mytime <- "6/29/2012 21:05"
MyTable <- data.frame(TimeCol = mytime)
query <- "select * from MyTable where TimeCol = '$mytime' "
fn$sqldf(query)
答案 1 :(得分:0)
虽然我在注释中链接的答案使用不同的函数来查询data.frame,但原理是相同的:将变量粘贴到选择字符串的其余部分,确保在必要时包含引号(使用{{ 1}}),然后将该字符串传递给您选择的sql查询功能。
shQuote
行末尾的分号可能不是必需的。
正如Joran在评论中提到的,query <- paste0("select * from MyTable where TimeCol = ", shQuote(mytime))
result <- fn$sqldf(query)
也可以使用(如果查询字符串中有许多变量组件,可能会增加可读性):
sprintf