1

我使用 R 中的 sql select 语句从表中提取一些数据,

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'参数

4

2 回答 2

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)
于 2012-10-23T15:19:54.690 回答
0

尽管我在评论中链接到的答案使用不同的函数来查询 data.frame,但原理是相同的:将变量粘贴到选择字符串的其余部分,确保在必要时包含引号(使用shQuote),然后传递字符串到您选择的 sql 查询函数。

query <- paste0("select * from MyTable where TimeCol = ", shQuote(mytime))

result <- fn$sqldf(query)

行尾的分号可能不是必需的。


正如 Joran 在评论中提到的,sprintf也可以使用(如果您的查询字符串中有许多可变组件,可能会提高可读性):

sprintf("select * from MyTable where %s = '%s'", "TimeCol", mytime)
# [1] "select * from MyTable where TimeCol = '6/29/2012 21:05'"
于 2012-10-23T12:35:34.087 回答