在SQL语句中使用变量时出错

时间:2012-10-23 11:23:41

标签: sql r select

我使用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'参数

2 个答案:

答案 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