问题与此类似(R, issue with sqldf: cannot make condition on date) 但是有不同的错误术语:
假设我有一张桌子:
OrderDate Sales
2005-02-28 12
2005-02-28 234
...
在原始的R DataFrame中,OrderDate的数据类型是double(在as.Date命令之后)
我想做select * from table where OrderDate='2005-02-28'
之类的事情,但遇到错误:
错误:" sqldf中的意外数字常量('从表中选择*,其中OrderDate =' 2005"
我在列出的问题和其他问题上尝试了一些解决方案,但仍然无法解决。
我觉得OrderDate的数据类型有问题,但并不完全清楚。即当我找到日期的数值并进入我的状态时,会遇到这样的错误(x是相应的数值):
.verify.JDBC.result中的错误(r,"无法检索JDBC结果集 for",:无法检索select * from的JDBC结果集 表,其中OrderDate = x order by Qty desc limit 3(无法解析" DATE" 常数" x&#34 ;; SQL语句:从表中选择*,其中OrderDate = x 按数量排序限制3 [22007-175])
答案 0 :(得分:3)
sqldf
将日期存储为1970-01-01以来的天数;有关更多详细信息,请参阅this post中的常见问题解答4。
这将有效:
df <- read.table(header=TRUE, text="OrderDate Sales
2005-02-28 12
2005-02-28 234
2005-03-01 567
2005-03-03 890")
df$OrderDate <- as.Date(df$OrderDate)
library(sqldf)
sqldf(sprintf("select * from df where OrderDate=%i",as.Date("2005-02-28")))
# OrderDate Sales
# 1 2005-02-28 12
# 2 2005-02-28 234
还有:
start <- as.Date("2005-02-28")
end <- as.Date("2005-03-01")
sqldf(sprintf("select * from df where OrderDate between %i and %i",start,end))
# OrderDate Sales
# 1 2005-02-28 12
# 2 2005-02-28 234
# 3 2005-03-01 567
请注意%i
的使用,以便将参数解释为整数(您也可以使用%d
)。